数组初始化为结构中的一个元素

时间:2012-12-25 07:44:58

标签: c pointers structure

我已经为结构中的一个元素初始化了数组,打印输出时出现了一些错误,请指出错误并指导解决。谢谢!

#include<stdio.h>

typedef struct person
{
int row[3];
int age;
}PERSON;

int main()
{
 int i;
 PERSON p;
 PERSON *pptr=&p;
 pptr->row[3] = {4,5,6};

 for (i = 0; i < 3; i++) { 
  printf (" %d\n", pptr->row[i]);

 }
return 0;
}

4 个答案:

答案 0 :(得分:1)

C语言中的数组对象不可分配。您无法使用赋值在整个数组中设置值。因此,使用赋值语法来做你想做的事情是不可能的。

你有机会在声明时初始化你的数组,即你定义了对象p

PERSON p = { { 4, 5, 6 }  };

但你没有利用这个机会。在那之后,使用纯核心语言功能来做它已经太晚了。

要在声明点之后设置整个数组中的值,您可以使用库函数(如memcpy)和复合文字

memcpy(pptr->row, (int []) {4, 5, 6}, sizeof pptr->row);

答案 1 :(得分:0)

您无法像这样为数组指定值:pptr->row[3] = {4,5,6};。这种语法仅在初始化时有效。您需要手动设置每个值或使用所需的值初始化数组,如下所示:PERSON p = {{4,5,6}, 0};

答案 2 :(得分:0)

完成PERSON p;后。创建了包含p的对象indeterminate values。 这意味着所有数据成员都已经使用垃圾进行初始化,因为它在堆栈中。

因此,pptr->row[3] = {4,5,6};不是数组的初始化,在这种情况下是不允许的。在这种情况下,for循环方法是最好的。

for (i = 0; i < 3; i++)
   scanf("%d",&(pptr->row[i]));  // prenthrsis is for human readability

答案 3 :(得分:0)

#include<stdio.h>

typedef struct person
{
int row[3];
int age;
}PERSON;

int main()
{
 int i;
 PERSON p;
 PERSON *pptr=&p;
 pptr->row[0] = 4;
 pptr->row[1] = 5;
 pptr->row[2] = 6;

 for (i = 0; i < 3; i++) { 
  printf (" %d\n", pptr->row[i]);

 }
return 0;
}

您不能像这样pptr->row[3] = {4,5,6};初始化数组,您可以使用上面的方法或使用for循环初始化数组..