C语言-字符数组、联合体、typedef

字符数组

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();
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值