32位和64位架构

问题描述 投票:1回答:1

在这里,结果结果是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);
}
types architecture character bits
1个回答
2
投票

64位上的sizeof(int*)将是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会给你指向数组的指针的大小,而不是数组的内容。

© www.soinside.com 2019 - 2024. All rights reserved.