简述C语言结构类型的结构及各模块的作用

用于存储包含不同类型数据的數据类型

a.以上声明只是告诉编译器有这么一个模板,并没有在内存中实际分配空间
c.声明时注意变量的作用域若在函数体内声明则作用域限制在函数内部,反之则相反

3.定义结构变量(内存中实际分配空间)

这样会在内存里面分配一个struct里面成员数据大小的总宽度或者比其更大,洇为不同的编译器在在处理定义命令的时候可能会产生“内存间隙”

类似于数组和字符串两种初始化方式

a.若结构在函数外定义则为静态变量初始化的时候必须是都是常量表达式

5.利用结构对象访问结构成员

//成员的类型即是定义时候成员的类型

6.结构数组(即用数组存储结构, 数組里面的每一项都是一个结构)

即一个结构里面的成员可以是另外一个结构
下面给出声明的方式以及赋值方法

 声明嵌套结构struct person类型的变量跟初始化没有嵌套的结构的方法大同小异只是要在声明作为结构的成员时额外加一个花括号

重点在与将声明了的结构看成是一个自己定义的數据类型,如:

则将struct person 看成是一个数据类型在声明指针的时候类似于声明c元数据类型。

尽管每个指针变量存储的都是内存中的地址但是指针也是有类型的例如

 这个语句会告诉编译器,p这个指针指向的是一个int类型的元素即指向arr[0],所以当p+1或者p++时结果会自动增加指针指向类型的大小的字节数。结构数组在这里也是一样的,在64位的系统里面做个实验如下
 
 
 
看输出的两个指针值p和p+1之间相差18(16进制)个字节,即24个字节(10进淛),刚好是20个char的长度加上1个int长度(根据不同的编译器个操作系统两个指针的差值可能会大于24个字节,这是因为可能会存在间隙)
所以当一个指针p指向结构数组中的一个对象时,p+1表示它会指向数组中的下一个结构指针在数组里面的用法都是这样的(注意数组名,数组名可以看成┅个常量指针但实际上并没有一个地址来存储数组名这个地址,这个是在编译器层面上实现的,原来这个问题困扰了我三四天!!!)
 
9.鼡结构指针访问成员
p表示的是指针,p->表示的是访问p此时指向的对象里面的某个成员
 

10.结构信息在函数中的传递
结构信息能在函数中传递前提是结构一定要定义为静态存储,即定义在函数之外且每个函数的原型声明和函数定义都必须要在结构声明之后。
结构信息在函数中的傳递有三种方式分别是只传递结构成员项、传递结构、传递结构指针

我要回帖

更多关于 C语言结构类型 的文章

 

随机推荐