Day13

2018-09-11  本文已影响0人  喝酸奶要舔盖__

typedef关键字

作用: 给数据类型起别名,格式: typedef 原来的数据类型名称 新的数据类型名称;

#include <stdio.h>

int main()
{
    /*
     * typedef 给数据类型起别名
     * 
     * 格式: typedef 原来的数据类型名称 新的数据类型名称;
     * 注意点:
     *   typedef不是定义一个新的数据类型,而是定义一个新的名字
     */
    typedef int ZHENGSHU;
    typedef ZHENGSHU ZHE; //给别名还能再起名字
    return 0;
}
// 1.给指针起别名
    typedef char* String;
    String name = "haha";
    printf("%s\n", name);
//2.给结构体起别名
    struct Person
    {
        String name;
        int age;
    };
    //2.1 先定义结构体类型,再给结构体起别名
    typedef struct Person ps;
    ps p = {"niuzi", 20}; //定义结构体变量
    printf("%s\n", p.name);

    //2.2 定义结构体类型同时,再给结构体起别名
    typedef struct Person
    {
        String name;
        int age;
    } ps;
    //2.2 定义结构体类型同时,再给结构体起别名,并且省略原有类型的名称
    //企业开发经常这样子写
    typedef struct
    {
        String name;
        int age;
    } Person;

    Person p = {"haha", 20};
    //3. 给函数指针起别名
    //注意点: 给指向函数指针起别名,那么指针名称就是别名,企业开发经常使用
    typedef int (*funp)(int a, int b);
    funp p1 = &sum; // 以后只要是以上这种函数样式都可以用funp来定义指针变量
    funp p2 = &minus;
    return 0;
}
int sum(int a, int b){
    return a + b;
}

int minus(int a, int b){
    return a - b;
}
如果是数据类型起别名,一律使用 typedef
宏定义处理复杂的就不好用

const关键字

作用: 用于定义一个常量,注意修饰指针的时候位置不同会造成不同的结果

#include <stdio.h>

int main()
{
    /*
     * const使用
     * 格式: const 数据类型 变量名称;
     * 字面量常量,宏定义常量
     * 注意点: const可以写在数据类型的前面也可以写在数据类型的后面
     *         对于基本数据类型来说写在前面和写在后面没有区别,但是
     *         对于指针类型来说,前后是有区别的
     */

//    int num = 0; //num是变量保存的数据可以被修改
//    const int num = 0; //只要在变量前面加上const,那么这个变量保存的数据就不可以修改了

    int num = 444;
//    const int *p; //1. 写在数据类型前面,代表指向的内存中存储的数据不能被修改,但是指向地址可以被修改
//    int const *p; //2. 写在数据类型的右边,和写在数据类型的左边作用一样

    int *const p; //3. 写在指针*号的右边代表指针指向的内存空间可以被修改,但是指针的指向不可以修改
    p = &num;
    printf("%i\n", *p);
    *p = 888;
    printf("%i\n", *p);

    int value = 666;
    p = &value;
    printf("%i\n", *p);

    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读