数组、结构体、联合体、枚举类型、类型转换
数组名是地址。struct、union名不是地址,必须使用&获取地址。
1、数组
int num[2] = { 1, 2 };//1×2,num[0]=1 int num[2][2] = { { 00, 01 }, { 10, 11 } };//2×2,num[1][1]=11 int num[2][2][2] = { {{000,001},{010,011}}, {{100,101},{110,111}} };//2个2×2数组,num[1][1][1]=111
2、结构体类型,变量成员单独分配内存,分别保存各自数据。
#include <stdio.h> int main() { struct Family{//struct 结构体类型名{数据类型n 变量名n;}; int age; char name[32]; //分配内存,占32字节 char address[64]; }wei;//Family结构体名,wei变量名,“;”不可省略 //或去掉wei,增加struct Family wei;//定义Family类型的结构体变量wei //若wei是wei[5],则为结构体数组 printf("Input age:"); scanf("%d", &wei.age); printf("Input name:"); scanf("%s", &wei.name); printf("Input address:"); scanf("%s", &wei.address); printf("name:%s\n", wei.name); printf("age:%d\n", wei.age); printf("address:%s", wei.address); return 0; }
3、联合体类型,变量成员共用同一内存,同一时刻只能保存一个成员的数据。
#include <stdio.h> int main() { union Family{ //union 联合体类型名{数据类型n 变量名n;}; int age; char name[32]; char address[64]; }wei;//Family联合名,wei变量名,“;”不可省略 //或去掉wei,增加union Family wei;//定义Family类型的联合体变量wei printf("Input age:"); //输入一次,显示一次,因为新的赋值会替换掉 scanf("%d", &wei.age); printf("age:%d\n", wei.age); printf("Input name:"); scanf("%s", &wei.name); printf("name:%s\n", wei.name); printf("Input address:"); scanf("%s", &wei.address); printf("address:%s", wei.address); return 0; }
结构体与联合体区别:
内存:struct为所有变量占用字节之和;union为最大成员变量占用的字节数
赋值有效值:struct每个成员变量各自赋值;union最后一次赋值有效
4、枚举类型
#include<stdio.h> int main() { enum Choice{a,b,c=64,d};//enum 枚举类型名{枚举元素列表}; printf("a=%d\n", a);//第一个元素默认为0,依次递增1.a=0 printf("d=%d\n", d);//若已赋值,则之后元素依次递增1.d=65 printf("d=%c\n", d);//元素可以赋值给任意数据类型。d=A return 0; }
#include<iostream> using namespace std; enum WeekDay{sun,mon,tue,wed,thu,fri,sat};//默认sun=0,mon=1,... int main(){ enum WeekDay x;//定义WeekDay类型的枚举变量x x=mon;//枚举变量不能直接用整型赋值,如x=1。因为类型不同,x是WeekDay类型的枚举变量,1是整型 cout<<x<<endl;//1,输出枚举常量mon对应的值。 return 0; }
5、类型转换(字符-数,整-浮点)
#include<stdio.h> #include<stdlib.h>//函数依赖的头文件 int main() { char *str = "12.34";//定义字符串变量 printf("字符串转整数:%d\n", atoi(str));//函数atoi(),12 printf("字符串转浮点数:%f\n", atof(str));//函数atof(),12.340000 return 0; } -------------------------------------------------------------------------------- #include<stdio.h> int main() { int num = 65; printf("%f\n",num);//整型转浮点型 float f = (float)num; printf("%f\n",f);//与上等效 return 0; }