当前位置:网站首页>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);
/*应该始终在结构的定义中使用结构标签,即使它并非必需的*/
/*当你有两个不同的东西时,在计算机科学中一个比较好的原则就是用不同的名字
*来称呼他们*/
边栏推荐
- CopyOnWriteArrayList details
- 纯纯粹粹纯纯粹粹
- 技术干货|如何将 Pulsar 数据快速且无缝接入 Apache Doris
- GTK实现旋转加载动画
- 一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
- STM32 GPIO LED and buzzer implementation [Day 4]
- ReentrantReadWriteLock详解
- 不可忽略!户外LED显示屏的特点及优势
- 2021年数据泄露成本报告解读
- Analysis of ffplay video playback principle
猜你喜欢

一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度

【Unity入门计划】基本概念(8)-瓦片地图 TileMap 02

ReentrantLock详解

参与便有奖,《新程序员》杂志福利来袭!

AI+BI+Visualization, Deep Analysis of Sugar BI Architecture

ModelWhale 云端运行 WRF 中尺度数值气象模式,随时随地即开即用的一体化工作流

生态剧变,电子签名SaaS模式迎来新突破,网络效应加速到来

详谈RDMA技术原理和三种实现方式

【QT】Qt项目demo:数据在ui界面上显示,鼠标双击可弹窗显示具体信息
我写了个”不贪吃蛇“小游戏
随机推荐
托尔斯泰:生活中只有两种不幸
MPLS的wpn实验
全新探险者以40万的产品击穿豪华SUV价格壁垒
ReentrantLock详解
devops-2:Jenkins的使用及Pipeline语法讲解
字典表(还需要输入2个字)
滑环安装注意事项
技术干货|如何将 Pulsar 数据快速且无缝接入 Apache Doris
袁小林:沃尔沃专注于出行的安全感,并且把它做到极致
[微信小程序开发者工具] × #initialize
EA 改口,称单人游戏是产品组合中“非常重要的一部分”
leetcode:189. 轮转数组
CopyOnWriteArrayList详解
一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
ReentrantReadWriteLock详解
新版本 MaxCompute 的SQL 中支持的 EXTRACT 函数有什么作用?
AI+BI+可视化,Sugar BI架构深度剖析
AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
How to get the 2 d space prior to ViT?UMA & Hong Kong institute of technology & ali SP - ViT, study for visual Transformer 2 d space prior knowledge!.
Hannah荣获第六季完美童模全球总决赛全球人气总冠军