0

構造内の要素の 1 つの配列を初期化しました。出力の印刷中にいくつかのエラーがありました。エラーを指摘し、解決方法を教えてください。ありがとう!

#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 に答える