首先是关于bit(比特)和byte(字节)的理解
32位平台指针大小是四字节(byte),1byte=8bit,64位平台指针大小是八字节
对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的是产生一个电信号正电/负电(1或 者0) 那么32根地址线产生的地址就会是:
00000000 00000000 00000000 00000000(32位)
2^32 个 Byte(2^32种地址排列组合,所以可以存2^32个不同的地址)
4*8=32(32位四个字节,1个字节8个比特位)
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000(64位)
1024 = 2^10
2^32 = 4 * 2^10 * 2^10 * 2^10
2^32 Byte = 2^32 / 1024 KB = 2^32 / 1024 / 1024 MB = 2^32 / 1024 / 1024 / 1024 GB = 4 GB
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向 (points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
1 #include <stdio.h>
2
3 int main()
4 {
5 int a=10;//在内存中开辟空间给变量a
6 int *p = &a;//'&'将a的地址取出传递给p,p就是变量指针,int*定义p为指针变量
7 printf("%p\n",p);
8 printf("%p\n",&a);//打印a的地址
9 printf("%d\n",*p);//解引用p,打印a的值
10 return 0;
11 }
0x7ffdb5637f94(16进制表示)是a的地址
10是a的值
指针变量p存放a的地址,通过*解引用p,得到a的地址指向a的值