当前位置:网站首页>C专家编程 第3章 分析C语言的声明 3.7 typedef struct foo{... foo;}的含义
C专家编程 第3章 分析C语言的声明 3.7 typedef struct foo{... foo;}的含义
2022-08-03 16:09:00 【weixin_客子光阴】
/*3.7 typedef struct foo {...foo;}的含义 */
/*C 语言存在多种名字空间:
*标签名(label name);
*标签(tag)---这个名字空间用于所有的结构、枚举和联合
*成员名---每个结构或联合都有自身的名字空间;
*其他
*/
/*在同一个名字空间里,任何名字必须具有唯一性,但在不同的名字空间
*可以存在相同的名字。
*/
/*
struct vnode {
long v_flag;
long v_usecount;
struct vnode *v_freef;
struct vnode *v_op;
};
*/
#include <stdio.h>
struct foo {
int foo;
int foo2;
} foo;
int main() {
printf("sizeof(foo) = %d, sizeof(int) = %d\n", sizeof(foo), sizeof(int));
}
/* 输出:
*/
/*sizeof(foo)中的foo代表的是一种结构类型的变量*/
//合法的
typedef struct baz {
int baz;
} baz;
struct baz variable_1;
baz variable_2;
typedef struct my_tag{
int i;
}my_type;
struct my_tag variable_1;
my_type variable_2;
这个typedef声明引入了my_type这个名字作为struct my_tag{int i;}的简写形式。但它同时也引入了结构标签my_tag,在它前面加个关键字struct可以表示同样的意思。如果你用同一个标识符表示结构类型和typedef声明引入的标签,那么以后使用这个标识符时前面就不用加上关键字struct了,但这个方法向人们灌输了一种完全错误的思维习惯。令人不快的是,这种与结构有关的typedef声明的语法确切地反映了组合结构类型与变量声明的语法。
typedef struct fruit{int weight, price_per_lb;} fruit;
/*语句1*/
struct veg{
int weight, price_per_lb;
} veg; /*语句2*/
struct fruit mandarin; /*使用结构标签“fruit”*/
fruit mandarin; /*使用结构类型“fruit”*/
struct veg potato;
//error
veg cabbage;
int i;
//error
i j;
/*小启发*/
/*操作typedef的提示*/
/*不要为了方便起见而为结构使用typedef*/
/*typedef应该使用在一下几个方面:
*数组、结构、指针以及函数的组合类型
*可移植类型。比如当你需要一种至少20比特的类型时,可以让他成为typedef的类型
*这样,当把代码移植到不同的平台时,要选择正确的类型,如short、int、long时,
*只要在typedef中进行修改就可以了,无须对每个声明都加以修改。
*typedef也可以为后面的强制类型转换提供一个简单的名字,如:
*/
typedef int (*ptr_to_int_fun)(void);
char *p; ...
= (ptr_to_int_fun)(p);
/*应该始终在结构的定义中使用结构标签,即使它并非必需的*/
/*当你有两个不同的东西时,在计算机科学中一个比较好的原则就是用不同的名字
*来称呼他们*/
边栏推荐
- mysql delete 执行报错:You can‘t specify target table ‘doctor_info‘ for update in FROM clause
- 使用VS Code搭建ESP-IDF环境
- window.open does not show favicon.icon
- How to start an NFT collection
- 元宇宙系列--Value creation in the metaverse
- protobuf 反射使用总结
- vector类
- AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
- Cookie和Session的关系
- 83. Remove Duplicates from Sorted List
猜你喜欢
leetcode-268.丢失的数字
DataGrip:非常好用的数据库工具,安装与使用教程,亮点介绍
《安富莱嵌入式周报》第276期:2022.07.25--2022.07.31
为什么我强烈推荐使用智能化async?
使用 PowerShell 将 Windows 转发事件导入 SQL Server
vector类
一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
【Unity入门计划】基本概念(8)-瓦片地图 TileMap 01
How to start an NFT collection
How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
随机推荐
socket快速理解
使用 PowerShell 将 Windows 转发事件导入 SQL Server
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
视频人脸识别和图片人脸识别的关系
托尔斯泰:生活中只有两种不幸
Common distributed theories (CAP, BASE) and consensus protocols (Gosssip, Raft)
【Unity入门计划】制作RubyAdventure01-玩家的创建&移动
Small Tools (4) integrated Seata1.5.2 distributed transactions
基于DMS的数仓智能运维服务,知多少?
spark入门学习-2
DAYU200 OpenHarmony标准系统HDMI全屏显示
常见分布式理论(CAP、BASE)和一致性协议(Gosssip、Raft)
可复现、开放科研、跨学科合作:数据驱动下的科研趋势及应用方案
[微信小程序开发者工具] × #initialize
Kubernetes 笔记 / 入门 / 生产环境 / 用部署工具安装 Kubernetes / 用 kubeadm 启动集群 / 安装 kubeadm
一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
leetcode:187. 重复的DNA序列
如何启动 NFT 集合
ffplay视频播放原理分析
AI+BI+可视化,Sugar BI架构深度剖析