为什么数组中的{}不起作用?

时间:2014-11-02 13:55:53

标签: c arrays

错误的正确语法是:

arr[n] = {10,20,50,40,80,70,30};

但它显示错误:“表达错误”

但它允许:

arr[n] = (10,20,50,40,80,70,30);

而且我也没有得到预期的输出!怎么了?

void main()
{
node *head,*P;
int n,i,arr[];
clrscr();

n=6;
arr[6] = {10,20,50,40,80,70,30};
head=(node*)malloc(sizeof(node));
head->data=arr[0];
head->next = NULL;
P=head;
for(i=1;i<n;i++)
{
P->next=(node*)malloc(sizeof(node));
P=P->next;
P->next=NULL;
P->data=arr[i];
}
P=head;
while(P!=NULL)
{
printf("%d",P->data);
P=P->next;
printf("----->");
}  
getch();
}

我的C程序代码!

2 个答案:

答案 0 :(得分:4)

因为{}代表数组初始化。唯一可以接受的方法就是:

int arr[] = {10,20,50,40,80,70,30};

但是第二行方式(适用于你)并没有达到预期效果。它实际上是comma operator。所以,这一行类似于

arr[n] = 30; // the last expression in a comma operator

答案 1 :(得分:0)

您无法对C中的数组进行此类动态初始化。

您应该省略n并执行:

int arr[] = {10,20,50,40,80,70,30};

你不应该这样做:

int arr[];    //initialization
arr[6] = {10,20,50,40,80,70,30};   //assignment

因为,它不是初始化。它是赋值,C不允许你这样做。