C语言 主函数和其他函数之间(元素)的大小变化[重复]

qfe3c7zg  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(116)
    • 此问题在此处已有答案**:

(13个答案)
4天前关闭。
我是C新手,我正在尝试用冒泡排序来做一个算法,这并不难,但是我不明白为什么我的表的sizeof()在我的主函数和另一个函数之间会改变。
事实上,我有一个有5个元素的表,所以我的sizeof(),因为对我来说int等于4个字节,等于20。但是,当我把我的表放入一个函数,用一个指针,我的sizeof得到8。在我看来,这是同一个表,所以我不明白为什么。
这里我的代码:

#include <stdio.h>
#include <stdlib.h>

void bubble_sort(int* table) {
    printf("Size of table in bubble sort function : %d\n", sizeof(table));
    int permutation = 1;
    int number = 0;
    while(permutation != 0) {
        permutation = 0;
        for (int i = 0; i < sizeof(table)/sizeof(int); i++) {
            if (table[i] > table[i+1]) {
                    number = table[i];
                    table[i] = table[i+1];
                    table[i+1] = number;
                    permutation++;
            }
        }
    }
}

int main() {
    int table[5] = {3, 20, 12, 4, 21};
    printf("Size of table in main function : %d\n", sizeof(table));
    bubble_sort(table);
}

我得到了这个:

Size of table in main function : 20
Size of table in bubble sort function : 8
jq6vz3qz

jq6vz3qz1#

数组衰减为函数参数中的指针。
函数中的sizeof (table)返回指针的大小,而不是它所指向的数组的大小。您不能根据数组的衰减指针值来确定数组的大小。
也许有一两个窍门,但我不知道有什么标准的方法,你可以这样做:

  • 将大小作为单独的参数传入。
  • 传递一个指向struct的指针,其中包含数组及其大小。

相关问题