Types 32位和64位体系结构
在这里,结果是3和1,这对我来说很有意义。然而,当代码在64位体系结构上运行时,结果变成3和2。你能解释一下为什么会这样吗Types 32位和64位体系结构,types,architecture,character,bits,Types,Architecture,Character,Bits,在这里,结果是3和1,这对我来说很有意义。然而,当代码在64位体系结构上运行时,结果变成3和2。你能解释一下为什么会这样吗 #include <stdio.h> void print(int* a) { int len = sizeof(a)/sizeof(a[0]); printf("%d", len); } int main(void) { int a[]= {11, 22, 33}; int len = sizeof(a)/sizeof(a[0]);
#include <stdio.h>
void print(int* a)
{
int len = sizeof(a)/sizeof(a[0]);
printf("%d", len);
}
int main(void) {
int a[]= {11, 22, 33};
int len = sizeof(a)/sizeof(a[0]);
printf("%d\n", len);
print(a);
}
#包括
无效打印(int*a)
{
int len=sizeof(a)/sizeof(a[0]);
printf(“%d”,len);
}
内部主(空){
int a[]={11,22,33};
int len=sizeof(a)/sizeof(a[0]);
printf(“%d\n”,len);
印刷品(a);
}
sizeof(int*)
在64位上是8个字节,而在32位上只有4个字节sizeof(int)
在这两种情况下都可能是32位
因此,对于32位的情况:
int len = sizeof(a)/sizeof(int); // (12/4) = 3
int len = sizeof(int*)/sizeof(int); // (4/4) = 1
int len = sizeof(a)/sizeof(int); // (12/4) = 3
int len = sizeof(int*)/sizeof(int); // (8/4) = 2
对于64位的情况:
int len = sizeof(a)/sizeof(int); // (12/4) = 3
int len = sizeof(int*)/sizeof(int); // (4/4) = 1
int len = sizeof(a)/sizeof(int); // (12/4) = 3
int len = sizeof(int*)/sizeof(int); // (8/4) = 2
也许您对这一部分感到困惑:
void print(int* a)
{
int len = sizeof(a)/sizeof(a[0]);
...
}
上面的a
降级为指针,int*
。在它上面使用sizeof
会给出指向数组的指针的大小,而不是数组的内容