最近看了C语言的一些网络课程,对指针有了一点浅薄的理解。(可能有问题,希望大佬们指正)
以下为正文
从最简单的整形指针变量开始
先写一个简单的间接访问去修改数值
int a=0;
int* p=&a;
*p=1;
首先要对这三句话有一个初步的理解
整形a | 赋值 | 10(存储在一个地址大P中 |
指针变量p | 指向a的地址 | 存储的就是大P |
*p | 对p解引用 | 得到a的值 |
第一句声明a并赋值为1
第二句声明一个指针变量p指向a的地址
第三句修改p所指向的a的值
个人理解:
对于第二句int* p;注意这里int*是一起的,首先表示这里是声明一个指针变量p,其次这个指针变量指向的类型是int型。
对于第三句这个*p意思是对p进行解引用(透过p中存储的a的地址找到a),也可以说是间接引用,间接引用a。然后对a中存储的数据进行修改。这里的*是解引用操作符或者说是间接引用操作符。与int*中的*不一样。
并且所有指针都同理
对于结构体指针
struct book
{
char name[30];//声明书名数组
int price;//声明价格
}
int main()
{
struct book b1={“程序设计“,50};//初始化
struct book* p = &b1;//把b1的地址给指针变量 p存储
//struct book是指针指向的类型,*表示这里是指针变量
//如果通过指针修改
(*p).price=20;//同样是先对p进行解引用,找到p中所存地址所对应的变量(这里是对应的结构体)
//然后用.price修改b1中的成员。
return 0;
}
可以看出(类型* 变量名)与(*变量名)中的*是作用不同的,同时这种对指针的理解方式是相通的。
结束语,这是创建51CTO后的第一篇博客,希望自己以后能养成写博客的习惯。也希望大家在这篇博客里有所收获。