-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];声明了一个包含一个元素的数组,但pptr->row[1]尝试访问数组的第二个元素(数组索引从零开始)。换句话说,您正在写入超出分配数组末尾的内存。

这样做的影响是不确定的,但如果指向的内存pptr->row[1]实际上是pptr->age

于 2012-12-11T13:17:45.663 回答
1

在 C 中,数组从 0 位置开始:

int row[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成员声明struct为 1 元素数组1,因此这些行

pptr->row[1] = 4;

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

正在访问数组边界之外的内存;这样做的行为是未定义的,所以几乎任何事情都可能发生。


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 中数组的索引从 0 开始,而不是从 1

于 2012-12-11T13:19:35.590 回答