理解指针就必须理解内存。
可以把内存想象成一个大走廊,走廊里面有很多的房间,每个房间都有一个编号,每个房间的大小就是一个字节。从0开始依次递增,这个编号就称为“地址”.由于内存中的房间很多,编号可能是一个非常大的数字~~~采用十六进制。
创建一个变量,用这个变量来保存一个内存的地址。这样的变量就称为“指针变量”。所谓的指针,其实就是一个变量,变量里面存了一个整数,这个整数的值就表示内存的一个地址。
这些不同类型的指针,虽然类型不同,但是存在一些共性的东西。
1.大家里面保存的都是地址。
2.这些不同类型的指针变量,自身占据的内存大小是一样的。(在同一个系统上,指针变量自身占据的内存大小都相同)在32位系统上,指针就是4个字节。在64位系统上,指针就是8个字节。
int num = 10;
//p就是一个指针变量
int* p = #
//*p就是解引用 *** 作,间接访问 *** 作
//根据指针变量中存的地址,找到对应的内存的内容。
printf("%dn", *p);
int num = 10;
//p就是一个指针变量
int* p = #
*p = 20;
printf("%dn", num);
//当前所描的指针类型的解引用 *** 作其实就等价于访问到原来的变量。
int*和double*不同在哪里?
提到一个指针变量,其实涉及到两个方面的核心信息~~~
1.地址在哪(指针变量的值)
2.内存的大小是多少(指针的类型)。
*p就是解引用 *** 作,间接访问 *** 作,根据指针变量中存的地址,找到对应的内存的内容空间。再根据指针的类型,来确定从这个起始位置开始,读取多少个字节过来。
在指针中,特殊的类型,这个类型的指针,只包含了地址,不包含大小信息 void*。因此无法对void进行解引用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)