当前位置:网站首页>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主从复制架构
[QT] Qt project demo: data is displayed on the ui interface, double-click the mouse to display specific information in a pop-up window
不可忽略!户外LED显示屏的特点及优势
leetcode:189. 轮转数组
AI也有健忘症?英国41岁教授专访:解决灾难性遗忘
一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01
【QT】Qt项目demo:数据在ui界面上显示,鼠标双击可弹窗显示具体信息
Spark entry learning-2
Not to be ignored!Features and advantages of outdoor LED display
随机推荐
如何使用MATLAB绘制极坐标堆叠柱状图
To participate in sweepstakes, incoming new programmers magazine welfare!
How to analyze the weekly activity rate?
Spark entry learning-2
protobuf 中数据编码规则
window.open does not show favicon.icon
EA 改口,称单人游戏是产品组合中“非常重要的一部分”
Kubernetes 笔记 / 入门 / 生产环境 / 容器运行时
【Unity入门计划】基本概念(7)-Input Manager&Input类
[微信小程序开发者工具] × #initialize
Interpretation of the 2021 Cost of Data Breach Report
一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
【Unity入门计划】基本概念(8)-瓦片地图 TileMap 01
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
用户侧有什么办法可以自检hologres单表占用内存具体是元数据、计算、缓存的使用情况?
Introduction to spark learning - 1
高可用版 主数据库数据结构改变 备数据库会自动改变吗
基于DMS的数仓智能运维服务,知多少?
I am doing open source in Didi
[QT] Qt project demo: data is displayed on the ui interface, double-click the mouse to display specific information in a pop-up window