## C语言中*有两种用途:用于声明指针变量(如int *p;)表示变量是指针;用于解引用(如*p = 10;)访问或修改指针指向的值。配合&可实现地址与值的互操作。 理科生网链接地址:https://www.lksr.net/2025/11/c.html {alertInfo}
由人工编写审核,非AI生成内容,请放心观看!
{getToc} $title={文章目录}
| C 语言中 * 的双重角色:指针声明与解引用 |
在 C 语言中,* 是一个非常核心的符号,它有两个完全不同的用途,根据上下文会有不同的含义。我们来系统地讲清楚。
| 作用类型 | 使用场景 | 示例 | 含义 |
|---|---|---|---|
| 解引用(dereference) | 访问指针指向的数据 | *p = 10; | 访问或修改指针 p 指向的值 |
| 声明指针 | 定义变量是一个指针类型 | int *p; | p 是一个 int 类型的指针 |
int *p;这行代码的意思是:“声明一个变量 p,它是一个指向 int 类型的指针。”
注意:
- 跟变量名
p结合,说明p是一个“指针”; int *p, q;中只有p是指针,q不是!
建议写法:加小括号强调清晰:
int* p; // OK,但容易误导
int *p, *q; // 更清晰,两个都是指针int x = 100;
int *p = &x;
printf("%d\\n", *p); // 输出 100这行 *p 的意思是:“取出 p 指针指向的地址里的值。”
也可以修改这个值:
*p = 200; // x 现在变成了 200所以 *p = “我指向哪里,就操作哪里的数据”。
#include <stdio.h>
int main() {
int x = 10;
int *p = &x; // p 指向 x 的地址
printf("x = %d\\n", x); // 输出 10
printf("*p = %d\\n", *p); // 输出 10
*p = 20; // 修改指针所指地址的值
printf("x after *p = 20: %d\\n", x); // 输出 20
return 0;
}| 操作符 | 含义 | 作用方向 |
|---|---|---|
& | 取地址 | 值 ➡ 地址 |
* | 解引用 | 地址 ➡ 值 |
记住:
&x= “我要x的地址”p= “我要p指向的值”
int add(int a, int b) { return a + b; }
int (*fp)(int, int) = add;
printf("%d\\n", (*fp)(3, 4)); // 调用函数指针,结果是 7这个 (*fp) 是必须加括号的,因为 *fp(int, int) 会被理解成函数返回一个指针,不是函数指针。
| 写法 | 说明 |
|---|---|
int *p; | 声明一个指向 int 的指针 |
*p = 10; | 给 p 指向的内存地址赋值 |
int *p = &x; | 指针指向变量 x 的地址 |
*p | 解引用:访问指针指向的数据 |
(*fp)(a, b) | 通过函数指针调用函数 |
版权声明:感谢您的阅读,资源整理自网络,如果您发现任何侵权行为,请联系 理科生网 管理人员,管理员将及时删除侵权内容。否则均为 理科生网 原创内容,转载时请务必以超链接(而非纯文本链接)标注来源于理科生网及本文完整链接,感谢!{alertInfo}Ahmedabad