// 为了可以方便研究,我在这个定义了一个void *p1指针来进行讨论。
//什么是指针, *** 作系统给程序分配一个内存管理工具,叫做指针,在现代 *** 作系统中,每一块数据内存空间(比如int,double,char......)都会有一个对应的地址,指针负责对内存地址的值进行,读,写, *** 作。
#include"stdio.h"
int main()
{
// 定义一个空指针,在运行这个程序的时候, *** 作系统会自动的给它分配64bit内存空间
// 因为我的是64位的 *** 作系统,所以,在我的程序中,我的一个指针是64bit
void *p1;
// 所以一个指针的大小从
// :0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000:计算指针结果:0
// :0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001:计算指针结果:1
// 到
// :1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110:计算指针结果:FFFFFFFFFFFFFFFE
// :1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111:计算指针结果:FFFFFFFFFFFFFFFF
// 以上就是一个64位 *** 作系统的地址大小,也就是一个指针的寻址能力。
// 也就是说,一个指针对应一个数据内存空间,数据类型的空间大小,取决于一个指针的类型
// 比如一个指针:int *p;
// 指针*p指向一个32bit大小的数据空间(指向int数据类型的指针)
// 比如指针:char *p2
// 指针*p2指向一个8bit大小的数据空间(指向char数据类型的指针)
// 本次定义的一个指针只是单纯的一个指针,没有划分固定的数据内存大小, *** 作系统只是在内存中划分64bit的一个指针
// 指针void *p1的值可能是其他程序留下的。
// 查看 *** 作系统分配给p1的指针的值
printf("start print the point address\n");
printf("%X\n",p1);
// 把p1指针的指向int的值给输出来看一下。也就是从这个p1的值的指向的地址开始,往后面数32个bit,也就是这地址指向的值。
printf("the value is\n");
printf("%d\n",(int*)p1);
//把p1指针的指向char的值给输出来看一下。也就是从这个p1的值的指向的地址开始,往后面数8bit,也就是这地址指向值。
printf("the char pointer of value is\n");
printf("%c\n",(char*)p1);
// 查看64位 *** 作系统的指针大小
printf("pointer Byte\n");
printf("%d\n",sizeof(p1));
// 指针变量的bit大小不会随着变量内型的改变而改变,只会随着系统的位数改变。所以结果都是64bit,8Byte
printf("int pointer Byte\n");
printf("%d %d %d %d",sizeof(int*),sizeof(char*),sizeof(float*),sizeof(double*));
return 0;
//
}
//如果以上内容有错误的地方,欢迎大家批评一下,谢谢各位~~。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)