C语言 传递一个整数数组给一个函数会在两个值之间插入“0“[关闭]

83qze16e  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(152)

已关闭此问题为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。

shyt4zoc

shyt4zoc1#

如果你看看警告:

p.c:14:20: warning: incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int' [-Wint-conversion]
    int *arr[5] = {2, 1, 3, 5, 4};

您将看到arr的类型不正确。你声明了一个指向int s的5个指针的数组,但用int s初始化了它。将int *arr[5]更改为int arr[5],因为它看起来是您需要/想要的。

wsewodh2

wsewodh22#

我想你已经使用了如下的指针数组:

*arr[5] = {2, 1, 3, 5, 4};

你应该使用如下:

arr[5] = {2, 1, 3, 5, 4};

相关问题