typedef和自定义结构体类型
在自定义结构体类型时会用到typedef关键字.大家都知道typedef是取别名的意思,在C语言中跟它容易混淆的有const,#define等,其区别不在本篇文章讨论之列.
/*定义单链表结点类型*/typedef char ElemType; typedef struct dNode {//声明单链表结点类型 ElemType data; struct dNode *next; //指针域 }LNode, *LinkList; //定义此结构体变量struct dNode a或LNode a;定义此结构体的指针struct dNode *p或LNode *p或LinkList p都是没区别的 /*在链表的末端插入新的节点,建立链表*/
注意点:
- 指针域定义了指向自己所在结构体类型的指针.这部分很容易错写,一种是漏写struct,要记住此时你声明next的时候typedef还没定义呢,哪来的dNode?如果不写struct,不管你是写dNode还是LNode结果都只有一种:后面根本编译不下去,错误一堆!此时还没定义完结构体呢!这也说明不能用LNode *next;总之要在结构体内定义指向自己的指针非得加上struct不可!
- 对于太多自学的人这条可能很有现实意义了.我相信有不少人会把指针域的dNode还}后的LNode连带最开头的dNode三个搞混.因为很多编程书上都给他们取一样的名字!好吧,如果照书上抄代码还没错.这里把struct dNode{}这部分看成整体,typedef就是给这个整体取别名的,我取的是LNode;与此同时给这个整体的指针取了LinkList作别名.
因此我们就有我在注释里写的2种定义结构体变量和3种定义结构体指针的方式. - 指针域那个是dNode不是后面的LNode,很简单后者只是别名,前者是真正的结构体名.如果你把这句写成struct LNode *next编译是能通过的,但是有潜在危机.定义完上述代码后,我又有了如下操作 LinkList p,head; head->next = p; 发现警告 warning C4133: “=”: 从“LinkList”到“LNode *”的类型不兼容!然后我将错写的struct LNode *next改回struct dNode *next就没警告了.
抱歉,我的代码注释太多了.初学者只是为了做笔记,请大家见谅.
文外话:
1.感谢<<C语言必须知道的300个问题>>的作者,本文涉及的问题在该书的第222和223,227(293页)都有详细阐述.读者如有疑问可自己再查阅该书,另外此书有PDF版.
2.本文作者有如下问题,请看到此博客的人帮帮我,在此不慎感激:
- 请问单链表的结点可以是不同类型吗,比如结点1我写73,结点2我写e.
- 请问结点可以是字符串吗,那如何定义呢,貌似C没有字符串类型变量,该用哪种标识符呢.
- (见注释)我想在以后能方面的调用这个单链表,但它只是字符型的,请问怎么定义可以让它想是字符型就是字符想是整型就是整型,注意此问题跟第一个问题不同.
3.博客园这个编辑器我第一次用,这不习惯啊,那个自动保存后边的查看是个坑么,什么恢复内容开始结束的.搞得我文章一开始重复一大块.还有我的代码块怎么有两个复制啊,怎么删除呢.
typedef和自定义结构体类型的更多相关文章
- typedef struct 指针结构体使用方法
A>>>>>>>>>>>>>>>>>>>>>>>> ty ...
- 自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}
一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct St ...
- iOS自定义结构体
一.提要 通过以官方的CGSize为例,自定义Objective-C中的结构体,并使用. 二.CGSize 1.系统定义的CGSize结构体 struct CGSize { CGFloat width ...
- C语言中的系统时间结构体类型
在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:0 ...
- Go语言规格说明书 之 结构体类型(Struct types)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Solidity的自定义结构体深入详解
一.结构体定义 结构体,Solidity中的自定义类型.我们可以使用Solidity的关键字struct来进行自定义.结构体内可以包含字符串,整型等基本数据类型,以及数组,映射,结构体等复杂类型.数组 ...
- 张超超OC基础回顾03_结构体类型作为成员变量的特殊用法
直接上例子: 要求: 合理的设计一个”学生“类 学生有* 姓名* 生日两个属性和说出自己姓名生日方法 要求利用设计的学生类创建学生对象,并说出自己的姓名和年龄 描述学生类 事物名称: 学生(Stud ...
- 让结构体类型frame的某个属性可以直接修改
本篇是是本人在博客园写的第一篇博客,前几天因为种种原因最终决定离开混了几年的csdn.希望在博客园有个新的开始 Foundation框架里面的frame是大家最熟悉不过的一个属性了,但是修改起来比较麻 ...
- 你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物
3.8 用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName ...
随机推荐
- 读取Jar包中的资源问题探究
最近在写一个可执行jar的程序,程序中包含了2个资源包,一个是images,一个是files.问题来了,在Eclipse里开发的时候,当用File类来获取files下面的文件时,没有任何问题.但是当程 ...
- Android IOS WebRTC 音视频开发总结(五一)-- 降噪基本原理
文章主要介绍噪声消除,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,欢迎关注微信公众号blacker,更多详见www.rtc.help ---------------------- ...
- .NET验证码控件(美观 易用)
新建一般处理程序:veify.ashx <%@ WebHandler Language="C#" Class="verify" %> using S ...
- LLVM language 参考手册(译)(1)
LLVM Language Reference Manual 摘要 这个文档是一个LLVM汇编语言的参考手册.LLVM是一个基于Static Single Assignment(SSA - 静态单赋值 ...
- xcode不能连接svn以及不能导入的解决方法
配置svn的方法不多说,网上一堆.这里要说的是怎么解决连接不上svn以及在xcode中不能修改svn目录的问题. 首先,xcode连接不上linux的svn,一般来说,问题就出在端口上.svn的默 ...
- php-resque学习笔记二(配置)
1:前提 系统:CentOS PHP版本:PHP7 安装目录:/usr/local/php php-resque 安装目录:/home/software/php-resque ...
- JS日期(Date)处理函数总结
获取日期 1.Date() ——返回当日的日期和时间. 2.getDate() ——从 Date 对象返回一个月中的某一天 (1 ~ 31). 3.getDay() ——从 Date 对象返回一周中的 ...
- 软件工程 speedsnail 第二次冲刺5
20150522 完成任务:蜗牛帧数变化已经实现,行走的蜗牛具有了动态的视觉效果: 遇到问题: 问题1 帧数大小根据人眼来设置 解决1 除29余0到14的为第一帧 明日任务: 蜗牛碰撞身体翻转
- Yii整合ZF2及soap实例
一)如何整合? // change the following paths if necessary $yii = dirname(__FILE__).'/framework/yii.php'; $c ...
- C# 修改IE 源代码参照样例
using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; ...