关键词:语言,结构

摘要:1.直接声明结构体变量:

struct{

int length;

int width;

}box1;

这样就声明了一个名为box1的结构体变量,但是同时要注意,如果在同一个程序中还存在如下的声明:

struct{

int length;

int width;

}box2;

请千万不要认为这个时候bo

1.直接声明结构体变量:

struct{

int length;

int width;

}box1;

这样就声明了一个名为box1的结构体变量,但是同时要注意,如果在同一个程序中还存在如下的声明:

struct{

int length;

int width;

}box2;

请千万不要认为这个时候box1和box2是两个相同类型的变量,如果你尝试将box1赋值给box2,你将会发现编译器会给你一个错误提示:incompatible types in assignment ,说明两个两个变量的类型是不同的

2.采用标签式的声明方式

struct BOX {

int length;

int width;

};

这样就可以使用这个标签BOX来声明一系列同类型的变量,请记住使用下面的声明方式,而不是简单的

BOX box1这样,当然这样也是可以的,不过需要换另外一种标签方式,声明方式如下:

struct BOX box1;

struct BOX box2;

这个时候两个变量的类型就是一样的了!当然你也可以在采用这种标签式的声明时,同时声明一个变量,如下面的一样:

struct BOX {

int length;

int width;

}box;

这个时候既采用了标签式声明又声明了一个变量box

3.利用typedef关键词产生新类型

这个时候就可以用产生的新类型来声明一个变量了,而不是简单的一个标签,这样书写代码会更清晰,也更易懂,同时也易维护

typedef struct {

int length;

int width;

}BOX; 注意:这个时候的类型名要写在最后 不要写在上面,开始的时候只是typedef struct,如果在这上面再加上一个东西,那是有其他作用的,类似这样:typedef struct box

现在如果要声明一个变量就可以用BOX box1,BOX box2来声明了!看上去简单了不少!

至此已经介绍了3种不同的声明结构体的方法,可以看到c语言在语法方面还是很松散的,可以根据个人的喜好来选择不同的声明方式,但是还有一个两个问题没有解决,如果学过数据结构的话,你会发现很多的数据类型,比如树,链表,图,里面的很多地方使用了结构体,并且在结构体里面引用自身,这就是今天要特别说明的地方

4.结构体的自引用?

如果要在一个结构体里面申明一个与本身一致的结构体类型,该怎么办呢?可能会这么写代码:

struct BOX {

int length;

int width;

struct BOX box1;

};

看上去很正确,在结构体中再声明一个与自己一样类型的结构体,但是这已经陷入了一个死循环,A包含B,B又包含A,没有休止!忽视了编译器的执行顺序,在一个结构体的声明没有结束之前,编译器并不知道该结构体的长度,所以编译器在编译的时候就不知道这个box1究竟是有多大了!会报一个错:

field `box1' has incomplete type

但是我们可以想一想,这里可以包含一个包含自身的指针,因为所有指针的长度是固定的,在编译之前就已经知道了,所以编译器在编译时会顺利通过,这也是大多数数据结构比如树,链接采用的一个技巧

struct BOX {

int length;

int width;

struct BOX *box1;

};

改为上面的声明样式就可以了,其中的box1现在成了一个指向自身的指针!编译会顺利通过!

最后我们还来思考一个问题,如果有下面的一个声明,你猜会有什么结果呢?

typedef struct {

int length;

int width;

BOX *box1;

}BOX;

原本是通过typedef来定义了一个新的结构体类型BOX,然后在结构体内部,使用这个新类型来定义一个指向本身的指针,但是这个时候编译器给出了一个error:syntax error before "BOX"

这是为什么呢?

因为类型名在声明的结尾才算完成定义,所以在结构内部使用的话是没有定义的,变通的方式是这样:

typedef struct box {

int length;

int width;

struct box *box1;

}BOX;

最后这个声明,将前面所说的几种不同方式的声明都结合起来了!

c语言有2维结构体没,c语言结构体说明相关推荐

  1. r语言与多维统计_Kaukatcr:多维空间语言设计的实验

    r语言与多维统计 与Project Xanadu™[1]相关的各种项目之一是ZigZag™,ZigZag™是一种组织器系统或思维导图工具,围绕着称为ZZStructures的扭曲多维空间构建. 从一开 ...

  2. C语言使用二维数组存储姓名,C语言二维数组 - osc_it9fazjn的个人空间 - OSCHINA - 中文开源技术交流社区...

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍二维数 ...

  3. c语言字符二维数组传参,C语言函数传递二维数组

    C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...

  4. c语言字符串二维数组如何赋值,C语言二维数组字符串的赋值

    今天用到了二维数组作为参数传递的程序,通过网上搜索,针对自己遇到的问题做个整理. 1.在被调用函数的形参数组定义可以省略第一维的大小,第二维不可省略,如下: void fun(int a[5][20] ...

  5. 《零基础看得懂的C语言入门教程 》——(十二)原来结构体是这么回事

    一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一 ...

  6. c语言 结构体的,c语言之结构体

    c语言之结构体 1.结构体基础知识 C语言提供了两种类型的聚合数据类型(能够同时存储超过一个的单独数据),数组和结构.数则是相同类型的元素的集合,而结构也是一些值的集合,这些值称为它的成员,单一个结构 ...

  7. C语言之简单版本银行储蓄系统4(结构体版本)

    1.老学长的唠叨 在上一个编的数组版本的简化银行系统的基础上改为结构体存储,为还没有学到结构体的学弟学妹们提供一个迁就的方案,现在将程序改为结构体存储了,也希望学弟学妹们有个c语言学习缓冲的时间,这个 ...

  8. c语言结构体错误,C语言结构体用法很多,但是坑也很多

    C语言可谓是编程界的传奇语言,历经几十年,依然排名前列. 前不久还写了一篇文章<2019年11月C语言接近Java>,说了C语言是比较受欢迎的一种语言,有望在年底超过JAVA,再次成为第一 ...

  9. C++:C++语言入门级基础知识考察点回顾之函数、结构体和类

    C++:C++语言入门级基础知识考察点回顾之函数.结构体和类 目录 C++的函数 1.函数的定义.调用,全局变量局部变量 1.1.自定义函数求其倒数

最新文章

  1. pipline中替换tag变量
  2. 一个人到底申请几张信用卡最合适?
  3. python基础实例 韦玮 pdf_Python基础实例教程(微课版)
  4. 将一个数组中不重复_你不知道的解法:数组中重复的数字
  5. 在Github上搭建你的博客
  6. ExtAspNet发展规划
  7. remmima 不能保存_不再使用RememBear密码管理器忘记密码
  8. 高中信息技术课程标准读后感
  9. 全系列三极管应用参数和代换大全
  10. SqlDbx连接Mysql中文乱码
  11. 两代荣耀Magic历史性同框,荣耀Magic 2如何践行科技理想主义?
  12. 东南大学张浩计算机,“智慧物联网与智能计算”高端论坛在东南大学举行
  13. Android禁止app字体大小跟随系统字体大小调节
  14. 一年内经验前端面试题记录
  15. 安装 Node.js
  16. iOS16锁屏可定制,WPS回应“删除用户本地文件”,紫光集团重整阶段即将收官,今日更多大新闻在此...
  17. 计算机10秒后重新启动,电脑自动反复重启,CPU风扇转十几秒就停了
  18. 物联网卡可以应用在哪些领域
  19. 程序员开上有牌面的车,车贷怎么偿还?
  20. 给父母定制Android手机

热门文章

  1. Docker 领衔 OpenSource.com 2014十佳开源软件排行榜
  2. JMS(三):MessageListener
  3. submit与button区别提交区别
  4. Eclipse 常用快捷键(动画讲解)
  5. 通过一个模拟程序让你明白ASP.NET MVC是如何运行的
  6. 惠普 Compaq Presario V3704TX改XP实战手记
  7. zabbix-将业务机器加入到监控中
  8. docker 基础之数据管理
  9. 不同组织物料类别差异列表
  10. linuxC编程实战 my_server.c例子问题总结