其他分享
首页 > 其他分享> > 对C语言指针的理解

对C语言指针的理解

作者:互联网

C语言中有很多变量,比如说我们常见的int,float变量,而指针变量也是一种变量,不过不一样的是,指针变量里面存放的是地址。
假设下面的图片是计算机的内存,每一个小格格代表一个字节(1byte),一字节等于8个比特位(1byte=8bit,能存放8位二进制数)。
在这里插入图片描述

在C语言中,int占4个字节,char占1个字节。我们可以把这一个小格格想成是一个个小房间,我们根据住进去的人数分配房间,比如说一大家子人需要五个房间,如果就一个人住一个房间就够了,如果一个人住五个房间就会造成空间的浪费,这也是设置不同变量的意义。
在指针运算中主要用到两个运算符,一个是&,叫做地址符,一个是*,称为间接运算符。&用来获取变量的地址,*用来获得地址的对应的值。前面说到,可以讲小格格看成一个个小房间,那地址就可以看作是这些房间的门牌号,我们可以通过门牌号找到里面住的小朋友。
举个例子:

int a = 7;
int b = *(&a)

先通过&获得a的地址,再通过*获得a的地址所对应的值,也就是7,所以b的值与a的值是相同的。
声明int,char之类的变量格式是:

int a;
char b;

生成指针类型的变量的格式是:

int* a;
char* b;

即将放在int后或者变量前。
为什么地址类型还要分为int型地址,或者char型地址呢,门牌号不应该都是一样的吗?我们可以这样想,因为不同的房子大小不一样,有的门牌号是四个人住的房子,有的是一个人住的房子,所以通过int
a;char* b;就可以知道该地址指向的变量所占的字节数是多少。
在这里插入图片描述

int a = 7;
int *b = &a;
int c = *(&a)

在上面这些声明中,&a就是a的地址,a的值是7,int *b = &a;即将a的地址赋给b。
也就是说:

a = 7;
b = &a;
*b = 7;
c = 7;

那&b代表什么意思呢?我们知道,b存放了a的地址,&b就是存放a这个变量地址的地址。可以这样理解,&b这个门牌号里的房子,里面放着a的门牌号,我们可以通过&b的门牌号,进去之后得到b的值,即a的门牌号,然后可以通过a的门牌号,进去a得到变量的值。

标签:人住,变量,int,C语言,char,门牌号,地址,理解,指针
来源: https://blog.csdn.net/qq_44672855/article/details/113786612