C 函数后数组变为空

C 函数后数组变为空,c,arrays,function,file,pointers,C,Arrays,Function,File,Pointers,我有一个相当标准的函数来读取文件。它在创建阵列时按预期工作 void readInts(char fileName[], int *values) { FILE *file; file = fopen(fileName, "r"); int maxBagWeight, numberOfItems; fscanf(file, "%d", &maxBagWeight); fscanf(file, "%d", &numberOfItems); int numbers[(number

我有一个相当标准的函数来读取文件。它在创建阵列时按预期工作

void readInts(char fileName[], int *values) {
FILE *file;
file = fopen(fileName, "r");

int maxBagWeight, numberOfItems;
fscanf(file, "%d", &maxBagWeight);
fscanf(file, "%d", &numberOfItems);

int numbers[(numberOfItems * 2) + 2];
values = (int*) malloc(sizeof(numbers));
values[0] = maxBagWeight;
values[1] = numberOfItems;

int i = 2;
while (!feof(file)) {
    fscanf(file, "%d", &values[i]);
    i++;
}

fclose(file);
}
在我看来:

int testValues[0]; //= {4, 11, 6, 2, 10, 4, 12, 6, 13, 7, 23};
    readInts(filename, testValues);

    //Number of total items
    int numberOfItems = testValues[0];
当我退出函数时,testValues在main中未被触及


它应该保留readInts函数中给定的值。我做错了什么?

main
中,您有
testValues
,它是一个数组

将该数组的第一个元素的地址传递到
readInts

readInts
中,将赋值给指针参数,使其不再指向
main
中的数组。由于不再指向
main
中的数组,因此不会对该数组进行进一步更改



另一个问题:数组
testValues
的大小是零个元素。这在标准C中是不允许的。此外,由于数组的大小在创建后不会改变,因此期望它获得任何元素都是徒劳的。访问索引0处元素的行为未定义,因为该元素不存在。

请记住,在C中,所有参数都是通过值传递的,这意味着它传递到函数内部局部参数变量的参数值。因此,
readInts
函数中
值的指针赋值只会赋值给局部变量,一旦函数返回,赋值就会丢失。为了解决这个问题,研究了在C语言中模拟引用传递的方法。或者只返回指针。此外,您将
testValues
定义为空数组,这没有任何意义。特别是因为任何大小的数组都有固定的地址,所以不能让它们“指向”其他地方。你需要一个指针。我在main中做了这个:
int*testValues然后将指针发送到函数,这是应该的吗?不,结果只是做了@someprogrammer dude告诉的事情。我从函数返回指针,它按预期工作