网站建设中,中国大陆地区请使用VPN访问,欢迎提建议,关注LSKR Mastodon

详细解释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)通过函数指针调用函数

1 条评论

  1. 文章写得很好!!!👍
Cookie Consent
我们使用 Cookie 来了解您如何使用我们的网站并提升您的体验。这包括个性化内容和广告。
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.