传递函数

时间:2015-09-16 02:30:38

标签: c arrays

我使用以下代码将数组传递给函数并在调用函数之前和之后打印它的大小:

#include <stdio.h>

int passing_array(int array[]) {
    int size = sizeof(array);
    printf("The size after passing: %d\n", size);
}

int main () {
    int a[] = {1, 2, 3};

    int size = sizeof(a);
    printf("The size before passing: %d\n", size);

    passing_array(a);

    return 0;
}

运行代码后,我得到了一个奇怪的结果:

  

传球前的尺寸:12

     

传球后的大小:8

我的问题是:为什么数组的大小从12变为8?

2 个答案:

答案 0 :(得分:4)

int passing_array(int array[]) {
    int size = sizeof(array);
    printf("The size after passing: %d\n", size);
}

相同
int passing_array(int* array) {
    int size = sizeof(array);
    printf("The size after passing: %d\n", size);
}

因此,size是指针的大小。

答案 1 :(得分:2)

将数组传递给函数时,它会衰减到指向数组第一个元素的指针。因此,参数列表中的int array[]实际上是int *array,而sizeof正在返回指针的大小。