C初学者-数组和指针



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

#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]);
}
我得到以下错误/警告:
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

的警告都与数组的初始化相关联:如果我用'5'而不是'SIZE'它的ok,为什么?a的误差我一点也不明白。我正在传递一个指针作为参数,问题在哪里?thatnks !

首先,应该是:

for (i=arr; i<&arr[5]; i++)
               ^^^

其次,i不是索引,它是指针。所以你的print语句应该是:

printf("%d",*i);

你的代码应该是:

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

但是你为什么不写得更容易理解:

void PrintArray(int *arr, int size)
{
    int i;
    for (i=0; i < size; i++)
        printf("%d", arr[i]);
}

C语言中的数组从0开始索引。所以最后一个元素是arr[4],而不是arr[5]

试试这个:

void a(int *arr, int size);
int main(){
    int arr[5] = {1,2,3,4,5};
    a(arr, 5);
    return 0;
}
void a(int *arr, int size){
    int i;
    for (i=0; i< size; i++)
        printf("%d", arr[i]);
}

在C89中,数组维数必须在编译时已知,变量的内容在编译时不知道(它也是const),定义可以在编译时知道。一个严格的例子如下:

#include <stdio.h>
#define MY_ARRAY_SIZE 5  /* "SIZE" is a bad name for a #define */
typedef int MY_TYPE[MY_ARRAY_SIZE]; /* if possible, use your OWN types for your usecases */
void my_function(int *arr); /* "a" is a bad name for a function */
int main(){
    MY_TYPE arr = {1,2,3,4,5};
    my_function(arr);
    return 0;
}
void my_function(MY_TYPE arr){
    int i;
    for (i=0; i<sizeof(MY_TYPE)/sizeof*arr; i++)
            printf("%d",arr[i]);
}

最新更新