Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指针大小及其可容纳的地址范围_C - Fatal编程技术网

C 指针大小及其可容纳的地址范围

C 指针大小及其可容纳的地址范围,c,C,指针将被分配1个字节,因此它最多可以寻址2^8个地址,即仅128个地址,但32位机器最多可以寻址2^32个地址,那么指针将如何保存超过8位的地址,我非常困惑,请任何人提供帮助 32位二进制文件的指针大小通常为4字节。如果将代码编译为64位二进制文件,指针的大小应为8字节。它足够大以寻址可用内存 您可以像这样检查任何类型的指针变量的大小 printf("%zu\n", sizeof(int *)); 您似乎混淆了char和char*的大小char存储字符变量,其大小为一个字节。您可以查看: pr

指针将被分配1个字节,因此它最多可以寻址2^8个地址,即仅128个地址,但32位机器最多可以寻址2^32个地址,那么指针将如何保存超过8位的地址,我非常困惑,请任何人提供帮助

32位二进制文件的指针大小通常为4字节。如果将代码编译为64位二进制文件,指针的大小应为8字节。它足够大以寻址可用内存

您可以像这样检查任何类型的指针变量的大小

printf("%zu\n", sizeof(int *));
您似乎混淆了
char
char*
的大小
char
存储字符变量,其大小为一个字节。您可以查看:

printf("%zu\n", sizeof(char));
但是,
char*
是指向
char
的指针,在32位环境中,其大小通常为4字节

printf("%zu\n", sizeof(char *));

32位二进制文件的指针大小通常为4字节。如果将代码编译为64位二进制文件,指针的大小应为8字节。它足够大以寻址可用内存

您可以像这样检查任何类型的指针变量的大小

printf("%zu\n", sizeof(int *));
您似乎混淆了
char
char*
的大小
char
存储字符变量,其大小为一个字节。您可以查看:

printf("%zu\n", sizeof(char));
但是,
char*
是指向
char
的指针,在32位环境中,其大小通常为4字节

printf("%zu\n", sizeof(char *));

第一句话的意思是什么——这是一个断言、一个假设、一个评估还是一个问题?无论哪种方式,它都没有什么意义。在32位机器上,指针通常是4个字节。听起来你好像混淆了1字节分配可以容纳的数据大小与指针的可寻址限制。对此,我只能说,多学习。@user2717079这不太可能。试试printf(“%zu\n”,sizeof(char*)并查看结果。我想你误解了这个概念,也许你是指
char
@user2717079的大小不。指针是一个包含地址的变量。该地址地址(冗余的目的)是另一个问题。这是C/C++的基础,您需要花一些时间来学习它。第一句话是什么意思?这是一个断言、一个假设、一个评估还是一个问题?无论哪种方式,它都没有什么意义。在32位机器上,指针通常是4个字节。听起来你好像混淆了1字节分配可以容纳的数据大小与指针的可寻址限制。对此,我只能说,多学习。@user2717079这不太可能。试试printf(“%zu\n”,sizeof(char*)并查看结果。我想你误解了这个概念,也许你是指
char
@user2717079的大小不。指针是一个包含地址的变量。该地址地址(冗余的目的)是另一个问题。这是C/C++的基础,你需要花一些时间来学习它。char*p的大小是一个字节,你能解释一下吗?
char
的大小是一个字节。但是,假设您使用的是32位系统,
char*
的大小将为4个字节。@user2717079您混淆了“char”和“char*”的大小。“char*”的大小完全取决于您的机器拱。@kunal使用“%ld”,因为sizeof返回长整数。@AmirNaghizadeh错误,
sizeof
返回
Size\u t
,这是由
%zu
非常正确地打印的,正如它所说的。char*p的大小将是一个字节,你能解释一下吗?字符的大小是一个字节。但是,假设您使用的是32位系统,
char*
的大小将为4个字节。@user2717079您混淆了“char”和“char*”的大小。“char*”的大小完全取决于您的机器拱。@kunal使用“%ld”,因为sizeof返回长整数。@AmirNaghizadeh错误,
sizeof
返回
Size\u t
,正如它所说,
%zu
非常正确地打印了它。