32 位和 64 位架构
32 bits and 64 bits architecture
在这里,结果变成了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);
}
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
对于 64 位情况:
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
是给你指向数组的指针的大小,而不是数组的内容。
在这里,结果变成了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);
}
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
对于 64 位情况:
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
是给你指向数组的指针的大小,而不是数组的内容。