指针在C语言中的含义和应用如何解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1092个文字,预计阅读时间需要5分钟。
它属于类型的一部分,不是变量名的修饰符。写成 `int *p;` 容易误以为是 `int *` 绑定在 `p` 上,但实际上是 `int *` 构成一个完整的类型——指向 `int` 的指针。
常见错误现象:int* p, q; 让人以为 q 也是指针,其实只有 p 是,q 是普通 int。正确写法是分开声明或重复 *:int* p, *q;
- 声明多个指针时,每个变量前都要加
*,不能省略 -
int *p, *q;和int* p; int* q;等价,推荐后者更清晰 - 用
auto推导时,auto p = &x;得到的是int*类型,*自动包含在推导结果里
取地址 & 和解引用 * 混用时为什么报错?
根本原因是操作对象类型不匹配:& 要求操作左值(有内存地址的变量),* 要求操作指针类型。两者嵌套顺序或对象类型错一点就崩。
常见错误现象:*&x 没问题(先取地址再解引用,回到原值),但 &*p 在 p 为空或未初始化时会崩溃;更隐蔽的是 &(x + 1) —— x + 1 是右值,没地址,编译直接失败。
本文共计1092个文字,预计阅读时间需要5分钟。
它属于类型的一部分,不是变量名的修饰符。写成 `int *p;` 容易误以为是 `int *` 绑定在 `p` 上,但实际上是 `int *` 构成一个完整的类型——指向 `int` 的指针。
常见错误现象:int* p, q; 让人以为 q 也是指针,其实只有 p 是,q 是普通 int。正确写法是分开声明或重复 *:int* p, *q;
- 声明多个指针时,每个变量前都要加
*,不能省略 -
int *p, *q;和int* p; int* q;等价,推荐后者更清晰 - 用
auto推导时,auto p = &x;得到的是int*类型,*自动包含在推导结果里
取地址 & 和解引用 * 混用时为什么报错?
根本原因是操作对象类型不匹配:& 要求操作左值(有内存地址的变量),* 要求操作指针类型。两者嵌套顺序或对象类型错一点就崩。
常见错误现象:*&x 没问题(先取地址再解引用,回到原值),但 &*p 在 p 为空或未初始化时会崩溃;更隐蔽的是 &(x + 1) —— x + 1 是右值,没地址,编译直接失败。

