c语言什么是指针,指针字节大小,指针所指向的值,一个指针多少位,指针的寻址范围

c语言什么是指针,指针字节大小,指针所指向的值,一个指针多少位,指针的寻址范围,第1张

// 为了可以方便研究,我在这个定义了一个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;

//

}

//如果以上内容有错误的地方,欢迎大家批评一下,谢谢各位~~。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1295863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存