已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
13天前关闭
Improve this question
我试图传递一个int数组给一个函数来在C中操作它。然而,当我这样做的时候,或者在访问它们的时候,数组中的值似乎出了问题。
下面的代码:
#include<stdio.h>
void aprint(int* arr, int n){
int i;
printf("calling aprint():\n");
for (i = 0; i < n; i++){ // changing to "i < n" to "i < 2*n" gives "2, 0, 1, 0, 3, 0, 5, 0, 4, 0"
printf("%d, ", arr[i]);
}
printf("\n");
}
int main(void){
int i;
int *arr[5] = {2, 1, 3, 5, 4};
int n = sizeof(arr)/sizeof(arr[0]);
printf("in main():\n");
for (i = 0; i < n; i++){
printf("%d, ", arr[i]);
}
printf("\n");
aprint(arr, n);
return 0;
}
给出的输出为
in main():
2, 1, 3, 5, 4,
calling aprint():
2, 0, 1, 0, 3,
我本以为
in main():
2, 1, 3, 5, 4,
calling aprint():
2, 1, 3, 5, 4,
将aprint()
中打印循环的范围扩展到2n,得到了原始数组中散布着“0“的数字。出什么事了?我用的是GCC。
2条答案
按热度按时间shyt4zoc1#
如果你看看警告:
您将看到
arr
的类型不正确。你声明了一个指向int
s的5个指针的数组,但用int
s初始化了它。将int *arr[5]
更改为int arr[5]
,因为它看起来是您需要/想要的。wsewodh22#
我想你已经使用了如下的指针数组:
你应该使用如下: