字符数组
char a[10] = "Happy";
//字符串数组赋值,只能在声明时
//a = "";
//可以修改单个内容
a[0] = "F";
//重新赋值
strcpy(a, "Sad");
getchar();
联合体(共用体)
不同类型的变量共同占用一段内存(相互覆盖),联合体变量任何时刻只有一个成员存在,节省内存
联合体变量的大小 = 最大的成员所占的字节数
比喻:同穿一条裤子
union MyValue{
int x;
int y;
double z;
};
void main(){
union MyValue d1;
d1.x = 90;
d1.y = 100;
//只有最后一次赋值有效,即x和y都是0,只有z有效
d1.z = 110;
printf("%d,%d,%lf\n", d1.x, d1.y, d1.z);
getchar();
}
输出结果
0,0,110.000000
枚举
enum Day{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
或者
//相当于
/*
enum Day{
Monday=0,
Tuesday=1,
Wednesday=2,
Thursday=3,
Friday=4,
Saturday=5,
Sunday=6
};
*/
void main(){
enum Day d = Monday;
printf("%#x,%d\n", &d, d);
int i = 0;
enum Day *p = &d;
for (; i < 7; i++)
{
printf("%#x,%d\n", p, *p);
p++;
}
getchar();
}
输出地址,可以发现枚举的地址是连续的
0xaff9cc,0
0xaff9cc,0
0xaff9d0,-858993460
0xaff9d4,-478950117
0xaff9d8,11532972
0xaff9dc,16651251
0xaff9e0,16650515
0xaff9e4,16650515
typedef 取别名
1.不同的名称代表在干不同的事情
typedef int jint;
2.不同情况下,取不同的别名
#if defined(__cplusplus)
typedef _JNIEnv JNIEnv;
typedef JavaVM javaVM;
3.书写简洁
typedef int* Ap; //代表指针
typedef struct Man* M;
//代表结构体 用M代表Man*
示例
typedef int Age;
void methodN(){
Age a = 8;
getchar();
}
//typedef 给结构体取别名
typedef struct Woman{
char* name;
int age;
} W,*WP; //W是woman结构体的别名,WP是woman结构体指针的别名
//等同于
typedef struct Woman W2;
typedef struct Woman* WP2;
void main(){
//结构体变量
W w1 = { "Rose", 20 };
//结构体指针
WP wp1 = &w1;
printf("%s,%d\n", w1.name, w1.age);
printf("%s,%d\n", wp1->name, wp1->age);
getchar();
}