迭代在c中通过引用传递的数组

时间:2013-04-06 03:24:28

标签: c arrays function pointers

我希望在c中编写一个打印数组函数。当你通过引用将一个数组传递给一个c函数时,我将一个指针传递给第一个元素。我假设我可以增加这个指针迭代数组但是我的程序只是段错误。

我首先想知道为什么我的程序是seg faulting,以及在c中编写这样一个函数的最惯用的方法。谢谢你。

void print_array(int *array, int length) {
    int i = 0; 
    for (i = 0; i < length; array++) {
        printf("%d\n", *array);
    }
}

int main (int argc, int *argv[]) {
    int test[10] = {0};
    print_array(test, 10);
}

2 个答案:

答案 0 :(得分:4)

你的循环是无限的,因为i中的i < length永远不会改变;这种情况总是评估为真。结果,你跳过了循环的结束。我建议将你的循环改为:

for (i = 0; i < length; i++) {
    printf("%d\n", array[i]);
}

...或者,如果您想使用array++,请更改条件:

for (int *end = array + length; array < end; array++) {
    printf("%d\n", *array);
}

答案 1 :(得分:0)

试试这个:

void print_array(int *array, int length) {
    int i = 0; 
    for (i = 0; i < length; i++) {
        printf("%d\n", array[i]);
    }
}

由于i是你的循环控制变量(它处于循环条件中),你需要递增它以避免无限循环。使用[]表示法对于某个级别的人来说比手动增加指针要容易得多。