c语言如何定义结构体变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言如何定义结构体变量相关的知识,希望对你有一定的参考价值。

我看到陈老师的书上定义结构体是这样的
struct student

long int num;
char name[20];
char sex;
;
struct student stu[3];
这里student是一个结构体类型名,我们再用student去定义一个student类型的结构体数组stu[3],或者一个变量,这样应该是可以的,这里的student就变为了普通类型的Int,char之类的变量类型,是吧?
但我在另外的例子上看到了这种形式:
typedef struct bmp_picture_typ

bitmapfile file;
bitmapinfo info;

bmp_picture,*bmp_picture_ptr;
这里bmp_picture,*bmp_picture_ptr究竟是变量还是变量类型的名字呢?因为前面有typedef。如果是没有typedef又是什么情况呢?

  首先,定义一个结构的一般形式为:

  struct结构名
  
  //成员表列
  ;

  成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:

  struct stu
  
  int num;
  char name[20];
  char sex;
  float score;
  ;

  在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。


  然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。

  int a;//定义一个int类型的变量a

  stu a; //定义一个stu类型的变量a

  int *p; //定义一个int类型的指针p

  stu *p; //定义一个stu类型的指针p

  int a[10];//定义一个int类型的数组a,它有10个元素,每个元素是int类型

  stu a[10];//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。

参考技术A typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性,例如typedef int am;这里am形式就代表整型int,同样在你的例子中:
typedef+
struct bmp_picture_typ
bitmapfile file;
bitmapinfo info;
+bmp_picture
是将结构体类型bmp_picture_typ用bmp_picture形式来代替,来隐藏笨拙的语法构造,之后是“,*bmp_picture_ptr”,注意前面有个逗号,说明与bmp_picture同等地位,不过多了个*,说明bmp_picture_ptr是表示bmp_picture_typ指针类型的形式,就像typedef int* bm,即用bm形式表示int*,而这里的形式只是将两者合并为typedef int am,*bm;而已本回答被提问者采纳
参考技术B typedef struct bmp_picture_typ

bitmapfile file;
bitmapinfo info;

bmp_picture,*bmp_picture_ptr;

等价于:
typedef struct bmp_picture_typ

bitmapfile file;
bitmapinfo info;
bmp_picture;

typedef struct bmp_picture_typ

bitmapfile file;
bitmapinfo info;
*bmp_picture_ptr;

这只是声明了一个结构体复合类型。

以上是关于c语言如何定义结构体变量的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何将16位结构体定义为4位和12位两部分

C语言中如何把结构体变量定义在主函数内,再调用一个自定义输入函数和输出函数

c语言一个结构体如何在多个源文件里面调用?

Keil中C语言模块化编程时全局变量、结构体处理细节

C语言结构体定义

c语言结构体变量怎么比较大小假设p,e都是如下类型的结构体变量?