ZoyaPatel

C 语言中 * 的双重角色:指针声明与解引用

SohaniSharma

## C语言中*有两种用途:用于声明指针变量(如int *p;)表示变量是指针;用于解引用(如*p = 10;)访问或修改指针指向的值。配合&可实现地址与值的互操作。 理科生网链接地址:https://www.lksr.net/2025/11/c.html {alertInfo}

由人工编写审核,非AI生成内容,请放心观看!

{getToc} $title={文章目录}

C 语言中 * 的双重角色:指针声明与解引用
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
Kolkata
Hyderabad
后一页 Bangalore 前一页

Random Manga

Ads

نموذج الاتصال