32位和64位架构

时间:2017-12-14 04:08:17

标签: 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]);
printf("%d\n", len);
    print(a);
}

1 个答案:

答案 0 :(得分:2)

64位上的

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*给出了指向数组的指针的大小,而不是数组的内容。