C语言中struct typedef 以及结构体指针用法
struct 、typedef以及结构体指针用法
- typedef用法
- 结构体指针用法
- 结构体初始化
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。具体区别在于:
- 若struct node{ }这样来定义结构体的话。在定义 node 的结构体变量时,需要这样写:struct node n;
- 若用typedef,可以这样写:typedef struct node{}NODE; 。在申请变量时就可以这样写:NODE n;其实就相当于 NODE 是node 的别名。区别就在于使用时,是否可以省去struct这个关键字。 有些时候,typedef struct NODE{ }NODE;还是可以直接NODE n;定义一个NODE类型的结构体。
typedef用法
用法举例1:在C中定义一个结构体类型时如果要用typedef:
typedef struct Student
{int no;char name[12];
}Stu,student;
于是在声明变量的时候就可:Stu stu1;或者:student stu2;(Stu 和student 同时为Student的别名)
用法举例2:如果没有typedef,传统定义一个结构体:
struct Student
{int no;char name[12];
}Stu;
此时说明已经定义了一个结构体Stu变量,如果要重新新建,就必须用struct Student stu1;
用法举例3:如果使用了typedef,另外这里也可以不写Student(于是也不能struct Student stu1;了)
typedef struct
{int no;char name[12];
}Stu;
用法举例4:typedef 还可以掩饰复合类型,如指针和数组。定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:
typedef char Line[81];
此时Line类型即代表了具有81个元素的字符数组,使用方法,例如Line text, secondline;
结构体指针用法
结构体指针用法1:
结构体要自引用时,Student1是错误用法。试想引用成员next是另一个完整的结构,其内部还将包含它自己的成员next,这第二个成员又包含一个完整的结构,它还将包括它自己的成员next,这样重复下去永无休止,内存都用光了。所以不合法。
struct Student1
{int age;struct Student1 next;
};
正确的用法是:结构体自引用 ,只能自引用指针。编译器在结构的长度确定之前就已经知道指针的长度,所以这种自引用是合法的。结构体的自引用在实现链表,树等高级的操作时用处很大。
struct Student1
{int age;struct Student *next;
};
结构体指针用法注意:这样是不行的,虽然Student1代表了结构体,但是Student1类型名的声明是在末尾定义,当要声明struct{ }时,内部无法识别Student1类型。
typedef struct
{int age;Student1 *next;
}Student1,*StudentPtr;
结构体指针用法2:
注意此时,Student1是struct Student{}的别名,StudentPtr是Student的指针
typedef struct Student1
{int age;Student1 *next;
}Student1,*StudentPtr;
我使用StudentPtr时出现了个有意思现象,结构体指针若不手动分分配内存,讲道理是不能用的。当定义了两个结构体指针s1,s2,两个结构体指针都不分配内存,给其中一个赋值,然后使用没有问题,输出良好。
#include <stdio.h>
typedef struct Student1
{int age;Student1 *next;
}Student1,*StudentPtr;
int main()
{StudentPtr s1;StudentPtr s2;s1->age= 9;printf("%d",s1->age);return 0;
}
当尝试给另一个结构体指针赋值时,编译没有问题,程序运行奔溃。
正确用法应该是
- 结构体指针需要初始化
- 结构体指针的成员指针同样需要初始化
- 若直接使用结构体,结构体中有成员指针,成员指针也要先初始化
结构体初始化
结构的初始化方式和数组初始化很相似。一个位于一对花括号内部,由逗号分隔的初始值列表可用于结构的初始化。这些值根据结构成员列表的顺序写出。
C语言中struct typedef 以及结构体指针用法相关推荐
- C++之指针探究(十八):typedef结合结构体指针
typedef结合结构体指针 例: 运行结果: 附上例代码 //小问学编程 #include <stdio.h>//我们一次定义了2个类型 //第一个是结构体类型,有2个名字:struct ...
- c语言的结构体与指针的区别,C语言 结构体与结构体指针用法总结
在C语言开发中,结构体用到的机会很多.所谓结构体,就是定义一种里面包含多种元素的变量. 我们来看一个简单的例子.比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息.结构体变量定义如下: s ...
- c语言如何将值赋给结构体指针,C语言给结构体指针赋值
<C语言给结构体指针赋值>由会员分享,可在线阅读,更多相关<C语言给结构体指针赋值(6页珍藏版)>请在人人文库网上搜索. 1.指向结构体的指针 在C语言中几乎可以创建指向任何类 ...
- c语言结构体指针初始化
*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...
- 指向结构体的指针和指向结构体指针的指针
例如,struct T *ptr;是指向一个结构体的指针,也可以当做一个结构体数组来用. 可以把结构体当做 int 来看,int* 类型即可以指向一个整数,也可以指向数组. struct T ** p ...
- c语言+结构体指针初始化,c语言结构体指针初始化===
c语言结构体指针初始化 今天来讨论一下C中的内存管理. 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以 ...
- 为什么结构体指针需要malloc申请空间
例如此时: int init(struct Node**head ) //结构体指针 初始化 { struct Node *newnode = (struct Node *)malloc(sizeof ...
- C语言结构体指针初始化(转)
reference: https://www.cnblogs.com/losesea/archive/2012/11/15/2772526.html 今天来讨论一下C中的内存管理. 记得上周在饭桌上和 ...
- c语言中结构体的指针初始化,c语言结构体指针初始化
今天终于看完了C语言深度剖析这本书,对C语言有了进一步的了解与感悟,突然发觉原来自己学C语言的时候学得是那样的迷糊,缺少深入的思考,在重新看书的时候发觉C语言基本教材虽然经典,但是缺乏独到性,老师在讲 ...
最新文章
- python 把字母转数字
- 如何更准确的理解面向对象编程中的对象
- P3374 【模板】树状数组 1
- 今日头条ocpm计费规则_入门篇|信息流广告的游戏规则—竞价机制
- 【转】Serverless架构
- Upload LABS Pass-2
- python装饰器详解-学习笔记-Python装饰器详解
- R语言:循环读取相似文件名的文件:
- php图片虚化处理 api PHP实现生成模糊图片
- Advanced Installer Architect创作工具
- oswatch的安装和使用
- 2-直观体验OAuth2
- Galaxy Tab3 10.1如何开启被隐藏的开发者选项?
- 蓝桥杯 逗志芃的危机
- MATLAB未定义变量example,小虫求助“ 未定义函数或变量 'Beam_InputData547'。
- fiddler改网页内容(附常用快捷键)
- Linux用户的基本操作1 用户相关信息 及useradd /usermod 部分
- Java媒体框架(JMF)
- 手机有监控功能?分分钟查询手机使用记录!早点知道就好了!
- .net c# 数字转中文大写
热门文章
- 多张图片合成一张的ps技术
- labview二维数组保存至excel
- java类农夫过河问题_Java简单实现农夫过河问题示例
- 同一局域网不同网段ip实现通信
- MySQL-decimal(a,b)含义
- python下载钉钉api_DingTalk SDK for Python
- DS1102E数字示波器使用说明书
- 走进向量计算:制作 OpenBLAS Docker 预构建产物镜像
- 龙志勇:云游戏的量变与质变 | WISE2022峰会演讲实录
- 哈尔滨师范大学计算机科学与技术专业怎么样,哈尔滨师范大学怎么样好不好(全国排名-王牌专业-网友评价)...