[学习资料] 指针符号*与->

[复制链接]
1343|9
 楼主| zhuomuniao110 发表于 2025-2-27 21:04 | 显示全部楼层 |阅读模式
在C语言中,* 和 -> 是与指针操作相关的两个重要符号。它们的作用和使用场景有所不同,下面详细介绍它们的用法和区别。
1. 指针符号 *
* 是C语言中的 解引用运算符(Dereference Operator),用于访问指针所指向的内存地址中的值。

用法:
声明指针变量:
  1. 数据类型 *指针变量名;
例如:
  1. int *p;  // p 是一个指向 int 类型的指针
取值操作:
  1. *指针变量名;
例如:
  1. int a = 10;
  2. int *p = &a;  // p 指向变量 a 的地址
  3. int b = *p;   // 对 p 进行取值操作,b 的值为 10
特点:
* 在声明中表示指针类型。
* 在表达式中表示取值操作。
必须确保指针指向有效的内存地址,否则会导致未定义行为。


2. 箭头符号 ->
-> 是C语言中的 结构体指针成员访问运算符,用于通过指针访问结构体或联合体的成员。

用法:
  1. 指针变量名->成员名;
示例:
  1. #include <stdio.h>

  2. struct Person {
  3.     char name[20];
  4.     int age;
  5. };

  6. int main() {
  7.     struct Person person1 = {"Alice", 25};
  8.     struct Person *p = &person1;  // p 指向 person1

  9.     // 使用 -> 访问结构体成员
  10.     printf("Name: %s\n", p->name);  // 输出: Name: Alice
  11.     printf("Age: %d\n", p->age);    // 输出: Age: 25

  12.     return 0;
  13. }
特点:
-> 用于通过指针访问结构体或联合体的成员。

等价于先解引用指针,再用 . 访问成员,即 (*p).成员名。

代码更简洁,可读性更高。


 楼主| zhuomuniao110 发表于 2025-2-27 21:05 | 显示全部楼层
  1. #include <stdio.h>

  2. struct Point {
  3.     int x;
  4.     int y;
  5. };

  6. int main() {
  7.     // 普通指针和 * 的使用
  8.     int a = 10;
  9.     int *p = &a;
  10.     printf("a = %d\n", *p);  // 输出: a = 10

  11.     // 结构体指针和 -> 的使用
  12.     struct Point point1 = {3, 4};
  13.     struct Point *ptr = &point1;
  14.     printf("x = %d, y = %d\n", ptr->x, ptr->y);  // 输出: x = 3, y = 4

  15.     // 等价形式
  16.     printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);  // 输出: x = 3, y = 4

  17.     return 0;
  18. }

* 用于指针的声明和取值操作。

-> 用于通过指针访问结构体或联合体的成员。

-> 是 (*p).成员名 的简写形式,代码更简洁。
 楼主| zhuomuniao110 发表于 2025-2-27 21:06 | 显示全部楼层
-> 是 (*p).成员名 的简写形式,代码更简洁。
所以你也应该明白他们跟   .   符号的区别了吧。
huangcunxiake 发表于 2025-2-27 21:32 | 显示全部楼层
这个初学者经常蒙圈。
21mengnan 发表于 2025-2-27 22:09 | 显示全部楼层
确实很有用的资料,适合对指针不明确的人。
jiekou001 发表于 2025-2-28 11:14 | 显示全部楼层
看完之后又扎实了自己的基础知识。
gaoyang9992006 发表于 2025-2-28 14:08 | 显示全部楼层
新手是容易弄混,.是通过结构体变量访问,->是通过结构体指针访问。
gejigeji521 发表于 2025-2-28 14:53 | 显示全部楼层
数组的指针是如何用,就是数组名字吗
kmnqhaha 发表于 2025-4-25 15:33 | 显示全部楼层
* 是C语言中的 解引用运算符(Dereference Operator),它的作用是访问指针所指向的内存地址中的值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

233

主题

3529

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部