这是我一直试图运行的简单而简短的代码:
#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'就可以了,为什么? 我的错误根本没有得到。我正在传递指针作为参数,问题出在哪里? thatnks!
答案 0 :(得分:5)
首先,那应该是:
for (i=arr; i<&arr[5]; i++)
^^^
但其次,i
不是索引,而是指针。所以你的打印声明应该是:
printf("%d",*i);
答案 1 :(得分:1)
您的代码可能应该是:
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]);
}
答案 2 :(得分:0)
试试这个:
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]);
}
答案 3 :(得分:0)
C中的数组从零开始索引。所以最后一个元素是arr [4],而不是arr [5]
答案 4 :(得分:0)
在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]);
}