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