-6

構造に記載されている行配列に数値を追加する必要があります。たとえば、row=[ 4 5 6] と age= 25 の出力が必要な場合、上記の構造をどのように使用できますか?? 助けてください !

#include<stdio.h>

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

int main()
{
    PERSON p;
    PERSON *pptr=&p;

    pptr->row[1] = 4;
    pptr->age = 25;
    printf("%d\n",pptr->row[1]);
    printf("%d\n",pptr->age);
    return 0;
}
4

5 に答える 5

2

なぜ行を尋ねていますか

printf("%d\n",pptr->row[1]);

age?の値を返します。これはint row[1];、1 つの要素を持つ配列を宣言しているにもかかわらず、配列pptr->row[1]の 2 番目の要素にアクセスしようとするためです (配列のインデックスは 0 から始まります)。つまり、割り当てられた配列の末尾を超えてメモリに書き込んでいます。

これを行った場合の影響は未定義ですが、 が指すメモリpptr->row[1]が実際にpptr->age

于 2012-12-11T13:17:45.663 に答える
1

C では、配列は 0 の位置から始まります。

int row[1]; 

1 つの int の配列を意味します。

最初の位置は次のとおりです。

pptr->row[0] = 4;
于 2012-12-11T13:18:24.260 に答える
1

C では、N 要素の配列には 0 から N-1 までのインデックスが付けられることに注意してください。例えば:

int arr[5];

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;

rowあなたのメンバーをstruct1要素配列1として宣言したので、行

pptr->row[1] = 4;

printf("%d\n", pptr->row[1]);

配列の境界外のメモリにアクセスしています。その際の動作はundefinedであるため、ほとんど何でも発生する可能性があります。


1. 意図がはっきりしない。rowほとんどのコンテキストでポインターとして扱われることを望まない限り、1 要素の配列はどのような用途に使用されるでしょうか?

于 2012-12-11T13:18:33.073 に答える
1

I need to add the numbers in the row array mentioned in the structure. for example I need the output of row=[ 4 5 6] and age= 25, how can i do with the above mentioned structure?? Please help !

この更新に基づく:

格納する要素の数を配列定義に入れます。

int row[1]; // This stores 1 element of type int

// you want to store 3 elements: 4, 5, 6, so...

int row[3];  // This is what you're looking for

配列を覚えておいてください:

int row[X];

からrow[0]に移動しrow[X-1]ます。したがって、あなたの場合X=3、配列の最小/最大値は次のとおりです。

min = row[0]
max = row[3-1] = row[2]

つまり、コードは次のようにする必要があります。

pptr->row[0] = 4;
pptr->row[1] = 5;
pptr->row[2] = 6;
pptr->age = 25;
printf("%d\n",pptr->row[0]);
printf("%d\n",pptr->row[1]);
printf("%d\n",pptr->row[2]);
printf("%d\n",pptr->age);
于 2012-12-11T13:29:17.930 に答える
0

すべてのコードの使用において

pptr->row[0]

それ以外の

pptr->row[1]

行配列のサイズは 1 で、C の配列のインデックスは 1 からではなく 0 から始まります

于 2012-12-11T13:19:35.590 に答える