- 此问题在此处已有答案**:
(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
1条答案
按热度按时间jq6vz3qz1#
数组衰减为函数参数中的指针。
函数中的
sizeof (table)
返回指针的大小,而不是它所指向的数组的大小。您不能根据数组的衰减指针值来确定数组的大小。也许有一两个窍门,但我不知道有什么标准的方法,你可以这样做:
struct
的指针,其中包含数组及其大小。