为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
Linux C语言结构体_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

Linux C语言结构体

雷过就跑 移动开发工程师
难度初级
时长 1小时30分
  • union的作用是让不同的类型的变量共享同一个内存地址

    查看全部
    0 采集 收起 来源:Linux C公用体

    2020-01-26

  • 宏的好处在于可以不指定数据类型,因为宏是不管语法的

    查看全部
  • 宏函数

    #define ADD(a,b)  (a+b)   (要尽量加上括号,防止语法错误,先后循序不一致。)

    查看全部
  • 预处理第二件事:宏替换

    #define 生成宏    R 宏的名字     10 宏的内容(作用效果,从本行开始)

    此时视10为字符(单纯的字符串替换,不考虑语法的问题)

    查看全部
  • 预处理第一件事,展开头文件

    然后是宏替换

    查看全部
  • .i文件内函数在底端可以看见

    $    跳到文件底部 或 G 或 shift+g


    查看全部
  • .i    生成一个i后缀的文件

    -E    只进行预处理


    查看全部
  • 编译文件的四个步骤

    查看全部
  • 结构体内存占用大小计算方法
    查看全部
    0 采集 收起 来源:Linux C公用体

    2019-12-30

  • 如何访问结构体成员:

    //数组,攻击力,价值

    struct mk14 mk15 = {"mk14_name",100,200};

    //访问结构体第一个变量

    printf("%s\n",mk15.name);

    //如果要对结构体进行运算,需要写完整 --》 mk15.atk++

    如何定义一个结构体数组

    结构体可以重复使用

    //同一个结构体定义两种不同的变量,如同都是武器,都是武器不同,其他参数就不同

    struct mk14 mk16[2] = { {"mk15_name",500,1000}, {"mk16_name",555,1111} };

    //第一个武器 第二个武器

    printf("%s\n,%d\n",  mk16[0].name,  mk16[1].atk);


    查看全部
  •    3-1

       结构体 stcuct 不同变量的集合

       //定义一种变量:里面可有多种变量的定义

       结构体名字的三种定义:

       

    1:在函数里面定义

    struct mk14{ //定义一个武器变量

    char name[20]; //武器名字

    int atk; //攻击力

    int price; //武器价值

    }

    int main(){

    int a;

    float b;

    struct mk14 awm;

    return 0;

    }

    2:在结构体后面定义名字,类似如 typedef

    struct mk14{ //定义一个武器变量

    char name[20]; //武器名字

    int atk; //攻击力

    int price; //武器价值

    }awm;

    int main(){

    int a;

    float b;

    return 0;

    }

    3:去掉结构体名字,但是这样就不能在次定义名字了。

    struct { //定义一个武器变量

    char name[20]; //武器名字

    int atk; //攻击力

    int price; //武器价值

    }awm;

    int main(){

    int a;

    float b;


    return 0;

    }


    查看全部
  • typedef 起别名 u8,u16之类的,也可以对函数进行起别名

    如 typedef int main(){} naim   --> 将int main() 一整个函数定义为naim

    typedef有作用域的问题

    define没有作用域的问题

    而且,typedef 是在 .i文件之后执行的,会被C语言的语法所限制,而define 不会


    查看全部
  • 预处理阶段工作:①将头文件展开直接放置到源文件中


                        ②宏替换


                        ③条件编译


    注意:宏替换只是简单得字符串替换,且可以传递参数。


    例如,#define N(n) n*10


       int b = N(a);  // 首先n替换成a,然后a*10。




    易错:#define ADD(a,b) a+b


      int c = ADD(a,b) * ADD(a,b);  


    /* 经过简单的替换会得到 a+b*a+b,这显示不是我们想要的结果,因此加上括号保证优先级不会出错。*/


    正确写法:#define ADD(a,b) (a+b) 这样变换后会成 (a+b)*(a+b)

    一般写法:

    int add(int a,int b)

    { return a+b;   }

    int c = a+b;

    那么宏定义写法的优势在哪:

    一般写法:参数ab 必须是一种类型的变量,要么整形 int,要么浮点型 float,

    字符串不这么写(详见C语言入门第六章6-8 )

    宏定义:参数ab 可以是任意,因为在宏里面所有参数都会被单成字符串来处理,

        只要修改 int c 前面的 int 就行


    查看全部
  • 2-1:


    linux c 预处理:

    编译的四个步骤:.c文件—>.i文件(预处理)->.s文件(编译)->.o文件(汇编)->可执行文件(链接)

    gcc -o helloworld.i helloworld.c -E生成一个.i文件,只进行预处理

    .c和.i文件都是C的语法。.i展开了头文件和进行宏替换(宏定义)

    2-2:

    宏定义符:#define  

    c语言常量分为直接常量和符号常量:

    #define 标识符 常量值(没有分号)

    宏的本质是在预处理阶段发生的单纯的字符串替换(宏替换);

    在预处理阶段,宏不考虑 C的语法。例如:

    #define n int main(

    n){} == int main(){}  //这样写是可以的

    而宏的作用通常是用于替换一些比常用的变量或名字:u8、u16之类的


    查看全部
  • 4-1 Linux C 公用体

    abc 存放到一个公用体中,节省开销 ,同一时刻只能存储一个成员

    union data{  int a;int b;int c;};

    结构体空间大小涉及到字节对齐,对齐的目的是让计算机快速读写

    结构体对象大小=最后一个成员的大小+最后一个成员的偏移量+填充字节数

    每个成员所占内存大小的偏移量=成员字节大小的整数倍。

    a的偏移量是0,b的偏移量是4,c的偏移量是8

    结构体总大小是12,是最宽的基本类型成员大小(int ,4)的整数倍

    公用体变量和各个成员的变量是一个地址



    查看全部
    1 采集 收起 来源:Linux C公用体

    2019-12-05

举报

0/150
提交
取消
课程须知
本课程为C语言的中级课程 1、需要有一定的C语言基础,如有基础薄弱的童鞋可以看一下网站上其他3门C语言的课程 2、因在Linux环境下,需会一些Linux下的命令,可以看一下《Linux C语言编程原理与实践》此课。
老师告诉你能学到什么?
1、预处理是干什么的 2、结构体是什么 3、公用体是什么 4、位运算是怎么回事 5、如何实现动态数据结构体 6、递归的原理
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!