当前位置:网站首页>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);
/*应该始终在结构的定义中使用结构标签,即使它并非必需的*/
/*当你有两个不同的东西时,在计算机科学中一个比较好的原则就是用不同的名字
*来称呼他们*/
边栏推荐
- 【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer
- 为教育插上数字化的翅膀,网易云信发布「互联网+教育」整体解决方案
- 简易网络传输方法
- QT QT 】 【 to have developed a good program for packaging into a dynamic library
- 世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
- protobuf 中数据编码规则
- 请问大家,MySQL全量怎么样可以提高性能呢?我这里瓶颈是在Source上,在不增加并行度的情况下,
- 13、OOM模拟
- posgresql 到 es 报这个错误 ,啥意思
- 带你了解什么是 Web3.0
猜你喜欢
随机推荐
托尔斯泰:生活中只有两种不幸
How to analyze the weekly activity rate?
How to start an NFT collection
如何使用MATLAB绘制极坐标堆叠柱状图
DataGrip数据仓库工具
MySQL相关介绍
用户侧有什么办法可以自检hologres单表占用内存具体是元数据、计算、缓存的使用情况?
蒋松廷 荣获第六季完美童模全球总决赛 全球总冠军
移动应用出海,你的“网络优化”拖后腿了吗?
13、OOM模拟
CopyOnWriteArrayList详解
leetcode-268.丢失的数字
不可忽略!户外LED显示屏的特点及优势
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
STM32的HAL和LL库区别和性能对比
详谈RDMA技术原理和三种实现方式
MySQL窗口函数
一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
【Unity入门计划】制作RubyAdventure01-玩家的创建&移动
13 and OOM simulation









