我已经为结构中的一个元素初始化了数组,打印输出时出现了一些错误,请指出错误并指导解决。谢谢!
#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;
}
答案 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
循环初始化数组..