复杂数据类型

1、在C语言中,除了之前学到的基本数据类型(整型<short,int,long>,浮点型<float,double>,字符型<char>)外,还有指针类型和构造类型(结构型<struct>,联合型<union>,枚举型<enum>)。

2、结构体类型,用于把不同类型的数据组合成一个集合体,声明格式:

struct  结构名{

数据类型1  成员名1;

数据类型2  成员名2;

…    …

数据类型n   成员名n;

};

例如:

#include<stdio.h>

struct students{
	char name[20];
	int age;
	char ID[10];
       //  …… (其他类似)
};

void main()
{
	//定义结构体的变量,如本处定义变量为stu 
	struct students stu;
	
	//访问结构体变量的某个成员的格式为:结构变量名.成员名 
	printf("输入学生姓名:");
	scanf("%s",stu.name);
       // 	…… (其他类似)
} 
结构体的特点是:①表示更丰富的复杂类型,是类的起源

内部属性定义的顺序不影响使用,但影响内存分配

关键认识点在于内存大小的对齐,如在上述例子中,sizeof(stu)=36,是因为在32位操作系统中按4个字节对齐

3、共用体(联合体),即用覆盖技术,让几个不同类型的成员变量共享同一存储区,定义联合体的语法:

union   公用体名{

数据类型  成员名;

数据类型  成员名;

     …   …

}共用体变量名;

例子:

#include<stdio.h>
union score{
	int point;
	char level;
};

void main()
{
	union score myScore;
	myScore.point = 80;
	printf("%d\n",myScore.point);
	myScore.level = 'A';
	printf("%c\n",myScore.level);
	printf("%d\n",myScore.point);
	printf("%d\n",sizeof(myScore));	
}
在上面例子中,point和level共享同一存储区,所以sizeof(myScore)的值是数据类型中比较大的那个,这里是int型的4个字节。在给level赋值了之后,上面的point的值就不再是80,而是A的ASCII码值65。

公用体的特点:①同一个内存区域可以存放不同数据类型(非常少见)

    ②内部属性的定义不影响使用也不影响内存分配

    ③操作了一个属性,其他属性也发生相应变化;因为它们在同一内存地址 

3、枚举类型,即把这种数据的类型可取的值一一列举出来,一个枚举型的变量的取址仅限于列出值得范围。声明的语法:

enum  枚举名{

标识符[=整型常数],

标识符[=整型常数];

     …    …

};

例子:

#include<stdio.h>
enum season{
	spring,
	summer,
	autumn,
	winter
};

void main()
{
	enum season now;
	now = spring;
	
	printf("%d\n",now);	
}
枚举类型的特点:①某些特定类型取值是固定的几个值,所以需要枚举

②枚举定义时括号中的不是属性,而是值的符号。

  ③改变值符号的顺序,影响使用(值发生变化,除非用赋值符号写死),不会改变内存分配。

4、指针类型,指针类型的变量专门用来存储某个变量的的内存地址,声明语法:

只想的变量的类型名  *指针变量名;

例子:

#include <stdio.h>

void main()
{
	//普通变量 
	double d = 3.14;
	//指针变量 
	double *p = &d;
	
	printf("变量d当中存放的值:%lf\n",d);
	printf("变量d的地址:%d\n",&d); 
	printf("变量d的空间大小:%d\n",sizeof(d));
	printf("指针p的空间大小:%d\n",sizeof(p));
	printf("指针p的值:%d\n",p);
	printf("指针p的地址:%d\n",&p);	
	printf("指针所存放地址所代表空间的值:%lf\n",*p); 
}
指针类型的特点:①double不代表p的类型,p是指针类型大小固定;它代表的是指针p指向的内存区域是一个double

②*是申明指针变量的标志

  ③变量名p可以任意命名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值