在这里,结果结果是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]);
printf("%d\n", len);
print(a);
}
答案 0 :(得分:2)
sizeof(int*)
将是8个字节,而32位上只有4个字节。 <{1}}在两种情况下都可能是32位。
因此对于32位情况:
sizeof(int)
对于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*
给出了指向数组的指针的大小,而不是数组的内容。