#include "stdio.h"
void main( )
{
struct {
char initial;
int age;
int grade;
} kids[12], *point, extra;
我正在按照http://www.gatesit.org/gitdownloads/C&DS.pdf第813-22页的教程进行操作,我不太明白什么是孩子[12],*指出,额外的;手段。据我所知,你可以在定义之后初始化struct的变量,但是为什么有一个数组大小为12,一个指针和一个额外的?
以下是代码。
int index;
for (index = 0; index < 12; index++)
{
point = kids + index;
point->initial = 'A' + index;
point->age = 16;
point->grade = 84;
}
kids[3].age = kids[5].age = 17;
kids[2].grade = kids[6].grade = 92;
kids[4].grade = 57;
for (index = 0; index < 12; index++)
{
point = kids + index;
printf("%c is %d years old and got a grade of %d\n",
(*point).initial, kids[index].age, point->grade);
}
extra = kids[2]; /* Structure assignment */
extra = *point; /* Structure assignment */
}
答案 0 :(得分:4)
struct mystruct {
char initial;
int age;
int grade;
} kids[12], *point, extra;
相当于:
struct mystruct {
char initial;
int age;
int grade;
};
struct mystruct kids[12];
struct mystruct *point;
struct mystruct extra;
在您的特定情况下,您的结构没有标记名称,因此您实际上无法在之后创建任何实例 - 这是您可以执行此操作的唯一方法,因为它未命名。
因为这里的结构是在函数内部定义的,并且它的定义只能在该函数中使用,所以你可能不需要再定义它的实例,所以没有名字也没有缺点。另一方面,除了在标记命名空间中少了一个名称(因此避免了在文件范围内隐藏标记名称的可能性)之外,它也没有特别的优势。
答案 1 :(得分:3)
struct {
char initial;
int age;
int grade;
} kids[12], *point, extra;
此结构未命名。
这将创建一个包含12个此结构的数组,名为kids
,指向此类结构的指针point
,另一个结构名为extra
。
对于仅在少数几个有限的地方使用的一次性结构,这是可以接受的。在一个更大的使用案例中,我会考虑这种“马虎”,并希望看到这样的东西:
typedef struct {
char initial;
int age;
int grade;
} student_t;
int main() {
student_t kids[12]; // 12 students in the class
student_t* pStudent; // A pointer to a student_t
student_t extra; // The new kid
}
答案 2 :(得分:2)
您正在声明struct
的12个元素数组,struct
类型的变量和指向struct
的指针。然后代码显示了可以使用这些类型的变量来访问struct
的内部部分的不同方式,以及如何在彼此之间分配项目。
答案 3 :(得分:2)
这基本上定义了一个由定义的结构kids[12]
的12个元素组成的数组,另一个变量是指向定义的结构*point
的单个指针,最后是结构extra
的单个实例。
由于struct没有名称,我想你必须在struct定义旁边一次定义所有这些名称。
同样地,它可能是这样的:
struct kid {
char initial;
int age;
int grade;
};
struct kid kids[12];
struct kid *pointer;
struct kid extra;