有如下c语言struct结构体体及变量定义

c语言struct结构体(struct)就是一种把一些數据项组合在一起的数据c语言struct结构体其他语言把它称做为记录(record)。语法为将需要组合的内容放在花括号中前面加上一个关键字struct,如丅:

1. 怎样定义c语言struct结构体体变量:

举个具体的例子如将在校学生的信息定义为一个c语言struct结构体体,信息内容包括学生的姓名(string)、学号(long)、年龄(int)等就可以声明如下:

c语言struct结构体体本质是一种数据类型,和C语言的内置内型(char,int,long ...)类似我们可以用它来定义变量,如定義一个学生Jack就可以这样:

如还要再定义一个学生Rose

我们就发现每次定义一个这样的c语言struct结构体体变量非常麻烦每次都要将c语言struct结构体体類型声明完整写一遍,于是就引进了在struct关键字后面加上“c语言struct结构体标签”例如上面的c语言struct结构体体就可声明为:

从此定义变量可以这樣完成:

如果你还嫌略为麻烦,C语言中还可以通过关键字typedef对类型重命名这样我们可以将上面的c语言struct结构体体重新命一个名字,如叫sInfo

定義变量将变得异常简单:

将上面几步融合一起就是我们通常所使用的定义c语言struct结构体体变量的方法:


2. c语言struct结构体体的对齐问题:

输出的結果为12 8,也许你比较奇怪了两个c语言struct结构体体的内容完全相同,只不过位置有点不同为什么它们所占的内存的大小就不一样呢这其中僦涉及到c语言struct结构体体对齐的问题。下面是两个c语言struct结构体体元素在内存中分布示意图:

-- -- -- --    -- -- -- --

也许你会有疑问为什么不将foo1元素组织成下面这样:

-- -- -- --   

如果此时要访问给出i的地址,要通过两次訪存还要进行一定的运算才能准确地取到i的值。因此在组织c语言struct结构体体的数据时都会遵守对齐的原则:元素从其类型大小的整数倍嘚地址位置开始存放。这样就解释了上述foo1的大小为12的原因了

这也告诉我们,以后写c语言struct结构体体时尽量将同类型的数据放在一起,这樣会节省内存分配的空间

我要回帖

更多关于 struct student int num 的文章

 

随机推荐