最近看了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={“c语言“,50};//初始化结构体
struct book* p=&b1;//把b1的地址给指针变量p,struct book是指针指向的类型,*表示这里是指针变量
//如果通过指针修改
(*p).price=20;//同样是先对p进行解引用,找到p中所存地址所对应的变量(这里是对应的结构体)
//然后用.price修改b1中的成员。
return 0;
}

可以看出(类型* ​变量名)与(*变量名)中的*是作用不同的,同时这种对指针的理解方式是相通的。


结束语,这是创建51CTO后的第一篇博客,希望自己以后能养成写博客的习惯。也希望大家在这篇博客里有所收获。