c入门第十篇——指针入门

一句话来说: 指针就是存储了内存地址值的变量。
在前面讨论传值和传址的时候,我们就已经开始使用了指针来传递地址。
在正式介绍指针之前,我们先来简单了解一下内存。内存可以简单的理解为一排连续的房子的街道,每个房子都有自己的地址,叫内存地址。在大多数计算机使用 8 位的块,或者字节(byte),作为最小的可寻址的内存单位,而不是访问内存中单独的位。下图简单展示了一下内存编址。
在这里插入图片描述
在C语言中,每个变量都存储在内存中的一个位置上,这个位置可以通过地址来访问。
如何获取变量的地址呢?用取址运算符 &来获取。
那获取的这个地址存储在哪里呢?指针。一个指针变量就是存储了内存地址值的变量。
有了地址之后,如何读取地址上的数据呢?可以用解引用运算符 * 来获取。
总结来说有几个重要的概念:
1. 内存地址:指示了变量存储在内存中的确切位置。
2. 指针变量:存储了内存地址值的变量。
3. 取址运算符(&):用取址运算符 & 来获取一个变量的内存地址。
4. 解引用运算符(*):用解引用运算符 * 来获取指向地址上存储的数据。
示例:

int var = 10; // 一个普通的整数变量
int *ptr = &var; // 一个指针变量,存储了var的地址

printf("var的值: %d\n", var); // 输出 var 的值
printf("var的地址: %p\n", &var); // 输出 var 的地址
printf("ptr存储的地址: %p\n", ptr); // 输出 ptr 存储的地址(即 var 的地址)
printf("ptr存储的地址: 0x%lx\n", ptr); // 输出 ptr 存储的地址(即 var 的地址)
printf("ptr解引用的值: %d\n", *ptr); // 通过 ptr 指针解引用访问 var 的值

在这个示例中,var 是一个普通的整数变量,ptr 是一个类型为 int *(指向int的指针)的指针变量,它存储了 var 变量的地址。通过 *ptr 我们可以访问 var 变量的值,尽管我们并没有直接使用 var 这个变量名。
总的来说指针的用途如下:
● 指针存储内存地址。
● 指针可以间接访问和操作内存中的数据。
● 指针可以使函数能够修改接收到的变量(传址,上一节讲述到)。
● 指针可以用于动态内存分配。
在C语言中,任何一个变量和函数类型,都可以有对应的指针。
这里只是简单介绍了一下指针的概念,指针与数组的关系比较密切,关于指针的使用,我们在后续介绍数组的时候,会详细介绍。

相关推荐

  1. c门第——物以类聚(数组)

    2024-02-11 06:20:01       53 阅读
  2. c门第——学生成绩管理系统

    2024-02-11 06:20:01       51 阅读
  3. c门第——数据持久化,读写文件

    2024-02-11 06:20:01       47 阅读
  4. Python门第5(爬虫相关)

    2024-02-11 06:20:01       68 阅读
  5. Rust语言门第-函数

    2024-02-11 06:20:01       32 阅读
  6. C++ 门第12:模板(Template)

    2024-02-11 06:20:01       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-11 06:20:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-11 06:20:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-11 06:20:01       82 阅读
  4. Python语言-面向对象

    2024-02-11 06:20:01       91 阅读

热门阅读

  1. 【sass】 中使用 /deep/ 修改 elementUI 组件样式报错

    2024-02-11 06:20:01       47 阅读
  2. redis单线程还快的原因

    2024-02-11 06:20:01       52 阅读
  3. 【讨论】C语言提高之指针表达式

    2024-02-11 06:20:01       47 阅读
  4. leetcode - 368. Largest Divisible Subset

    2024-02-11 06:20:01       42 阅读
  5. 从零开始:用 Rust 编写你的第一个 Web 服务

    2024-02-11 06:20:01       45 阅读
  6. 如何为Kafka加上账号密码(二)

    2024-02-11 06:20:01       53 阅读
  7. C#系列-C#访问MongoDB+redis+kafka(7)

    2024-02-11 06:20:01       51 阅读
  8. 最小生成树——Prim/Kruskal Python

    2024-02-11 06:20:01       51 阅读
  9. 迟旧迎新感悟

    2024-02-11 06:20:01       44 阅读