c语言进阶结构类型

枚举:

1 .  枚举变量可以赋值给不存在的数值,例如:

    enum COLOR {red, green, blue};  //这里枚举的有效数值为0-2;   

    enum COLOR t = 5;                   // 编译器并不会报错

2.在枚举的最后可以加上一个number:

    enum COLOR {red, green, blue, number};  //number用来遍历枚举或构建用枚举数量做下标的数组会很方便;

注意这里看抛开number这个”计数器“来说,枚举一共有3个,而number正好是3,就是利用这个特点做事情。

结构类型:

   有的变量需要有多个变量来构成,这时候就需要用到结构了:

struct  date {

int  year, int month, int day;

} ;  //注意不要忘了结尾的”;“

 疑问:printf(”%i-%i-%i\n“, date.year, date.month, date.day);  // %i是用来输出什么的?

回答 :两个都可以用来表示整数

     在printf中没有区别;在scanf中%i可以识别带有前缀的八进制和十六进制;

    所以平时注意下小细节。

结构类型的各个成员可以是不同类型的(区分与数组)

结构变量可以在初始化之后整体赋值(加上强制类型转换),并且不同结构变量之间可以相互赋值;

结构变量本身不是地址,要获得结构变量的地址需要用到&运算符。

注意结构中的’.‘运算符比’&‘和’*‘运算优先级都要高;组合键:(*p).  x 相当于p->x;

表示指针所指的结构变量的成员。

写出一个读入结构的函数:

struct point{
    int x;
    int y;
};

struct point* getStruct(struct point* t)
{
    scanf("%d %d", &t->x, &t->y);
    return t;
}

对struct的进一步探究,struct的字节数,地址,成员间的地址是否连续,附上实验代码:

#include<stdio.h>

struct point{

int x;

int y;

};

int main()

{

struct point Q;

int len = sizeof(Q);

printf("len = %d\n", len);

struct point *p = &Q;

int *p1 = &Q.x;

int *p2 = &Q.y;

printf("p = %p\n", p);

printf("p1 = %p\n", p1);

printf("p2 = %p\n", p2); 

}

struct与数组类似,struct的地址就是其第一个成员的地址,且无论其成员类型如何,地址总是连续的;但是struct的字节数就未必是成员字节数的和了,不对,这个说法不严谨,应该说未必是所有成员类型的sizeof的和,

struct的字节数总是大于等于所有成员类型的sizeof的和。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值