1
 #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],*点,额外;方法。据我所知,您可以在定义它之后初始化结构的变量,但为什么会有一个大小为 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 */

 }
4

4 回答 4

3
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;

在您的特定情况下,您的结构没有标签名称,因此您实际上无法在之后创建它的任何实例 - 这是您可以做到的唯一方法,因为它没有命名。

由于此处的结构是在函数内部定义的,并且它的定义仅在该函数中可用,因此您可能不需要再定义它的任何实例,因此没有名称没有任何缺点。另一方面,除了在标签命名空间中少了一个名称(因此避免了在文件范围内隐藏标签名称的可能性)之外,它也没有特别的优势。

于 2013-10-05T18:20:56.803 回答
2
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
}
于 2013-10-05T18:19:46.363 回答
1

您正在声明 的 12 元素数组、struct该类型的变量struct和指向struct. 然后代码显示了这些类型的变量可用于访问内部部分的不同方式struct,以及如何相互分配项目。

于 2013-10-05T18:19:46.963 回答
1

这基本上定义了一个由已定义结构的 12 个元素组成的数组kids[12],另一个变量是指向已定义结构的单个指针*point,最后是该结构的单个实例extra

由于该结构没有名称,我想您必须在结构定义旁边一次定义所有这些。

等效地,它可能是这样的:

struct kid {
    char initial;
    int age;
    int grade;
   };

struct kid kids[12];
struct kid *pointer;
struct kid extra;
于 2013-10-05T18:20:04.037 回答