通过一个例子引出对指针的概念理解
1,例子
#include<stdio.h>
int main(void)
{
int xiaozhang = ; //小张的身高
int xiaoli = ; //小李的身高
int xiaowang = ; //小王的身高 int *xiaolin,*xiaohong; xiaolin = &xiaozhang; //小玲指向小张
xiaohong = &xiaowang; //小红指向小王 printf("小玲喜欢的人的身高:%d\n",*xiaolin);
printf("小红喜欢的人的身高:%d\n",*xiaohong); xiaohong = &xiaoli; //小红指向小李(移情别恋) *xiaohong = ; //将小红指向的对象赋为180 == 修改小红喜欢的人的身高 printf("\n");
printf("小张的身高:%d\n",xiaozhang);
printf("小李的身高:%d\n",xiaoli);
printf("小王的身高:%d\n",xiaowang);
printf("小玲喜欢的人的身高:%d\n",*xiaolin);
printf("小红喜欢的人的身高:%d",*xiaohong); return ;
}
2,理解
当指针p的值为对象x的地址时,我们一般会说“p指向x”。
通过以上例子,我们在这里可以将“指向”理解成“喜欢”,因此,指针p的值为对象x的地址我们可以理解成“p喜欢x”。
接着进行“xiaohong = &xiaoli”的复制,我们就可以得出“小红喜欢小李”。
xiaolin、xiaohong的数据类型是“指向int型变量的指针型”
xiaolin = &xiaozhang;
xiaohong = &xiaowang;
从以上赋值语句也可以发现,&xiaozhang、&xiaowang的类型也是“指向int型变量的指针型”。
所以说取地址符(&)不光可以理解为取址运算符,也可以理解为生成指针,表达式&xiaozhang是指向xiaozhang的指针,其值为xiaozhang的地址。
指针运算符
在进行显示的地方,就要用到叫作指针运算符的单目运算符*。
将指针运算符*写于指针之前,就可以显示该指针指向的对象内容。
因此,*xiaolin就等于“xiaolin指向的对象”,*xiaolin就是xiaozhang。*xiaolin是xiaozhang的别名。
所以当p指向x时,*p就是x的别名。
指针运算符的赋值
当指向 xiaoli 的指针赋给xiaohong,使 xiaohong 指向 xiaoli,这样一来就变成“xiaohong 喜欢 xiaoli”
小红从小王移情别恋给小李了,啧啧...
所以,如果将指向其他对象的指针赋给指针变量,那么该指针变量就会指向这些对象。
因此,上例的程序运行结果如下
xiaolin = &xiaozhang;
xiaohong = &xiaowang; printf("小玲喜欢的人的身高:%d\n",*xiaolin);
printf("小红喜欢的人的身高:%d\n",*xiaohong); xiaohong = &xiaoli; //int 175 *xiaohong = ; //修改小李的身高,从175变为180 printf("\n");
printf("小张的身高:%d\n",xiaozhang);
printf("小李的身高:%d\n",xiaoli);
printf("小王的身高:%d\n",xiaowang);
printf("小玲喜欢的人的身高:%d\n",*xiaolin);
printf("小红喜欢的人的身高:%d",*xiaohong); //输出180