在日常生活中,相信大家对内存和指针都很熟悉了,如果你还没有很懂,那么就让我来为你讲述下内存和指针所存在的关系。
1.内存
其实内存就像一栋楼房,内存会首先被划分为一个个的内存单元,被划分出来的内存单元就像是一个个的房间,然后,我会对内存单元进行编号,也就相当于我们生活中的门牌号。一个内存大小是一个字节,那么为什么不用其他单位来度量一个内存的大小呢?我们知道,内存单元的大小从小到大依次是比特位、字节、KB、MB、GB、TB、PB...这里以int类型的变量举个例子,int类型的变量需要用到4个字节也就是32个比特位,如果用比特位度量则需要很大的空间,而KB等与1024个字节,显然它对与存储int类型的变量过大了,因此我们使用字节来度量内存单元的大小。32位机器的一个地址能够管理2^32字节的空间,推理可知64位的机器能够管理2^64字节的空间。
2.指针
讲完了内存,大家肯定对指针产生了好奇,那么指针到底是什么呢?其实指针就是刚才我们讲过的内存单元的编号,指针也叫地址。下面我们通过一段代码来了解指针:
int main()
{
int a=10;
int* pa = &a; //创建指针变量,指针就是地址,地址就是指针,int*表明指针变量pa指向的a类型是int
printf("%p", pa);//pa用来存放a的地址,%p专门用来打印地址
return 0;
}
运行结果如图:
读取内存中的数据得:
通过10进制和16进制间的换算,可得上述结论正确--指针就是地址,地址就是指针。
下面我们将利用pa来修改a的值:
#include <stdio.h>
int main()
{
int a=10;
int* pa = &a; //创针变量,指针就是地址,地址就是指针,int*表明指针变量pa指向的a类型是int
*pa = 20; //解引用操作符--通过pa指向a,*pa就是a
printf("%d", a);
return 0;
}
运行代码:
3.指针变量的大小
int main()
{
printf("%d", sizeof(long long*));
printf("%d", sizeof(long*));
printf("%d", sizeof(int*));
printf("%d", sizeof(char*));
printf("%d", sizeof(short*));
return 0;
}
代码运行结果:
这是64位机上的显示,下面我们看看32位机上的显示: