C初学者 - 数组和指针

yot*_*moo 1 c arrays pointers

这是我一直试图运行的简单而简短的代码:

#include <stdio.h>

int const SIZE = 5;

void a(int *arr);

int main(){
    int arr[5] = {1,2,3,4,5};
    a(arr);
    return 0;
}

void a(int *arr){
    int *i;
    for (i=arr; i<&a[5]; i++)
            printf("%d",*arr[i]);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误/警告:

main.c: In function ‘main’:
main.c:15: error: variable-sized object may not be initialized
main.c:15: warning: excess elements in array initializer
main.c:15: warning: (near initialization for ‘arr’)
main.c:15: warning: excess elements in array initializer
main.c:15: warning: (near initialization for ‘arr’)
main.c:15: warning: excess elements in array initializer
main.c:15: warning: (near initialization for ‘arr’)
main.c:15: warning: excess elements in array initializer
main.c:15: warning: (near initialization for ‘arr’)
main.c:15: warning: excess elements in array initializer
main.c:15: warning: (near initialization for ‘arr’)
main.c: In function ‘a’:
main.c:22: error: subscripted value is neither array nor pointer
main.c:23: error: array subscript is not an integer
Run Code Online (Sandbox Code Playgroud)

警告都与数组的初始化有关:如果我把'5'代替'SIZE'就可以了,为什么呢?我的错误根本没有得到.我正在传递指针作为参数,问题出在哪里?thatnks!

Oli*_*rth 5

首先,那应该是:

for (i=arr; i<&arr[5]; i++)
               ^^^
Run Code Online (Sandbox Code Playgroud)

但其次,i它不是一个索引,它是一个指针.所以你的打印声明应该是:

printf("%d",*i);
Run Code Online (Sandbox Code Playgroud)

  • @tjameson:这是合法的C.一个接一个的地址定义明确. (2认同)