->:间接引用运算符

->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”.
举个例子:
struct Data
{
int a,b,c;
}; /*定义结构体*/
struct Data * p;/*定义结构体指针*/
struct Data A = {1,2,3};/*声明变量A*/
int x;/*声明一个变量x*/
p = &A ; /*让p指向A*/
x = p->a;/*这句话的意思就是取出p所指向的结构体中包含的数据项a赋值给x*/
/*由于此时p指向A,因而 p->a == A.a,也就是1*/

对于一开始的问题 p = p->next;这应该出现在C语言的链表,这里的next应该是一个与p同类型的结构体指针,其定义格式应该是:
struct Data
{
int a;
struct Data * next;
};/*定义结构体*/
…………
main()
{
struct Data * p;/*声明指针变量p*/
……
p = p->next;/*将next中的值赋给p*/
}
链表指针是C语言的一个难点,但也是重点,学懂了非常有用。要仔细讲就必须先讲变量、指针。
什么是变量?所谓变量,不要浅显的认为会变得量就是变量。套用我们院长的问话:“教室变不变?”变,因为每天有不同的人在里面上课,但又不变,因为教室始终在那,没有变大或变小。这就是变量:有一个不变的地址和一块可变的存储空间。正常情况下,我们只看到变量这个房间里面的东西,也就是其内容,但不会关注变量的地址,但是C语言的指针,就是这个房间的地址。我们声明变量就相当于盖了间房子存放东西,我们可以直接观看房子里的东西,而声明指针,就是相当于获得了一个定位器,当用指针指向某个变量时,就是用指针给变量定位,以后我们就可以用指针找到他所“跟踪”的变量并可以获得里面的内容。
那结构体呢?结构体就相当于是有好几个房子组成的别墅,几个房子绑定在一起使用。假设现在有很多这种别墅分布在一个大迷宫里,每间别墅里都有一间房子。里面放了另一个别墅的位置信息,现在你手拿定位器找到了第一栋别墅,从里面得到了你想要的东西(链表的数据部分),然后把下一栋别墅的位置计入你的定位器(p = p->next),再走向下一栋别墅……如此走下去,知道走到某地下一栋别墅信息没有了(p->next == NULL),你的旅行结束。这就是链表一次遍历的过程。现在你能明白 p=p->next的含义了吧!

转载于:https://www.cnblogs.com/yhc99/p/9231724.html

```mermaid flowchart TD A[C++ 基础语法] --> B[基本元素] A --> C[数据类型] A --> D[运算符] A --> E[控制流语句] A --> F[函数] A --> G[输入输出] B --> B1[关键字] B --> B2[标识符] B --> B3[常量] B --> B4[变量] B1 --> B11[数据类型关键字] B1 --> B12[控制流关键字] B1 --> B13[存储类关键字] B2 --> B21[命名规则] B2 --> B22[作用域] B3 --> B31[整数常量] B3 --> B32[浮点常量] B3 --> B33[字符常量] B3 --> B34[字符串常量] B4 --> B41[变量声明定义] B4 --> B42[变量初始化] B4 --> B43[变量作用域和生命周期] C --> C1[基本数据类型] C --> C2[复合数据类型] C --> C3[指针] C --> C4[引用] C1 --> C11[整型] C1 --> C12[浮点型] C1 --> C13[字符型] C1 --> C14[布尔型] C2 --> C21[数组] C2 --> C22[结构体] C2 --> C23[联合体] C2 --> C24[枚举] C21 --> C211[一维数组] C21 --> C212[多维数组] C22 --> C221[结构体定义] C22 --> C222[结构体成员访问] C3 --> C31[指针声明初始化] C3 --> C32[指针运算] C3 --> C33[指针数组] C3 --> C34[指针函数] C4 --> C41[引用声明初始化] C4 --> C42[引用作为函数参数] D --> D1[算术运算符] D --> D2[关系运算符] D --> D3[逻辑运算符] D --> D4[位运算符] D --> D5[赋值运算符] D --> D6[条件运算符] D --> D7[其他运算符] E --> E1[条件语句] E --> E2[循环语句] E --> E3[跳转语句] E1 --> E11[if 语句] E1 --> E12[switch 语句] E11 --> E111[简单 if 语句] E11 --> E112[if - else 语句] E11 --> E113[if - else if - else 语句] E2 --> E21[for 循环] E2 --> E22[while 循环] E2 --> E23[do - while 循环] E3 --> E31[break 语句] E3 --> E32[continue 语句] E3 --> E33[return 语句] F --> F1[函数定义声明] F --> F2[函数参数传递] F --> F3[函数重载] F --> F4[递归函数] F --> F5[内联函数] F2 --> F21[值传递] F2 --> F22[引用传递] F2 --> F23[指针传递] G --> G1[标准输入输出流] G --> G2[文件输入输出] G1 --> G11[cin 对象] G1 --> G12[cout 对象] G1 --> G13[格式化输入输出] G2 --> G21[文件打开关闭] G2 --> G22[文件读写操作] ``` 把这个mermaid,转化生成思维导图
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值