Types 32位和64位体系结构

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]);

在这里,结果是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);
}
#包括
无效打印(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
会给出指向数组的指针的大小,而不是数组的内容