0

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

#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

4 回答 4

1

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

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

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

但你没有利用这个机会。在那之后,使用纯核心语言特性来做到这一点为时已晚。

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

memcpy(pptr->row, (int []) {4, 5, 6}, sizeof pptr->row);
于 2012-12-25T07:59:20.620 回答
0

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

于 2012-12-25T07:49:35.113 回答
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
于 2012-12-25T07:50:20.637 回答
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循环来初始化数组..

于 2012-12-25T07:55:54.780 回答