首页 > 解决方案 > 为什么A的大小等于8而不是4?

问题描述

据我所知,作为函数参数传递的数组并未完全复制,而只是指向数组中第一个元素的地址的指针。为了看到它的实际效果,我写了一段代码,我在互联网上找到并期望sizeof(A)inSumOfElements()应该是 4。不知何故它是 8。我错过了什么?

#include <stdio.h>

int SumOfElements(int A[]) {
    int i, sum = 0;
    int size = sizeof(A) / sizeof(A[0]);
    printf("SOE - size of A: %d, size of A[0]: %d\n", sizeof(A), sizeof(A[0]));
    for (i=0; i < size; i++) {
        sum += A[i];
    }
    return sum;

}

int main () {
    int A[] = {1, 2, 3, 4, 5};
    int total = SumOfElements(A);
    printf("main - size of A: %d, size of A[0]: %d\n", sizeof(A), sizeof(A[0]));
    //printf("Sum of elements = %d\n", total);

}

标签: arrayscfunctionpointers

解决方案


64 bits机器上,指向变量的指针是 8 个字节。这取决于您使用的架构,请参阅这篇文章


推荐阅读