zoukankan      html  css  js  c++  java
  • c语言编写经验逐步积累4

    寥寥数笔,记录我的C语言盲点笔记,仅仅为以前经历过。亦有误。可交流。

     

    1.逻辑表达式的使用
    取值 = 表达式 ? 表达式1:表达式2。
    比方x = y > z ? y:z

    2."+,-"等逻辑运算符优先级大于移位,移位大于逻辑运算

    3.
    sizeof在编译时由编译器完毕,对其传入的參数不做运算处理。
    sizeof(i++);返回4;不会对实际的i进行操作
    sizeof和strlen的差别是,后者是运算时运行。
    返回遇到非NULL时的字符个数。

    sizeof处理数组名时会统计分配的内存数,如a[12] = {};则sizeof(a) = 12;
    如a [] = "aaa",则编译器是分配4内存空间存放数据,sizeof(a)= 4;

    4.强制类型转换先于+,-,故指针类型变化后,自加操作会不同;

    5.invalid combination of type specifiers
    无效的类型进行组合。引起的原因主要是头文件多种数据类型define和typedef引起了错误。
    typedef是一个类型的重定义 不是宏的值的重定义 仅仅能用于类型的替换
    。主要在编译阶段,须要带有分号

    define是宏定义,主要在预处理阶段,不太适合做类型转换,结尾分号会被带入宏替换
    比方先定义
    #define Uint8 unsigned char 
    typedef xdc_Uint8 Uint8;这就进行了宏替换为:
    typedef xdc_unsigned char Uint8;从而导致了类型结合无效的现象。故define宏是预处理的替换,而typedef是做到数据类型的真正转换与定义。
    宏最好不要进行typedef的转换!!

    。。

    数据类型在多处定义时,注意不要出现上述情况

    6.printf输出%号,须要使用printf("%% ");来输出

    7.逻辑或与运算或要切记:
    |和||,以及&和&&的使用。

    8.取非!

    和~的运算优先级》 + -;


    9 strcpy是将源地址開始到结束的字节数拷贝到目的地址。

    strlen统计的从源地址到遇到前的字节数。不算如

    10.某一位置1 A |= (1 << 5);
    某一位置0 A &=  ~(1 << 5);
    某一位取反 A ^= (1 << 5); 与1异或取反。

    11. union进行赋值时须要使用a.b操作

    12、0x%08x,输出16进制数要达到8位,不然在前面补0

    14.栈帧包含还有一帧须要的函数參数。返回的pc地址以及当前帧的ebp.

    15. 结构体对齐
    struct test
    {
    char x1;
    short x2;
    float x3;
    char x4;
    };
    因为编译器默认情况下会对这个struct作自然边界(有人说“自然对界”我认为边界更顺口)对齐,结 构的第一个成员x1,其偏移地址为0,占领了第1个字节。第二个成员x2为short类型,其起始地址必须2字节对界。因此,编译器在x2和x1之间填充 了一个空字节。

    结构的第三个成员x3和第四个成员x4恰好落在其自然边界地址上,在它们前面不须要额外的填充字节。在test结构中,成员x3要求4字节 对界,是该结构全部成员中要求的最大边界单元。因而test结构的自然对界条件为4字节,编译器在成员x4后面填充了3个空字节。整个结构所占领空间为 12字节。


    16. 
    memset(),是将n个字节都设置为传入的一个字节如memset(a, 0, 100);
    memcpy(dst, src, n);将src開始的n个字节copy到目的上去。

    17.多进程引用的动态链接库中的全局变量问题 
    因为不同进程间是独立的。有自己的text和data,而全局位于数据段,故不会存在竞争的现象。

    18.struct的一种结构体数组申明与定义的方法。
    static struct {   char *name;
        int offset;  } _reg_list[] = {};
     


    a




     

  • 相关阅读:
    处理数据
    Vue--Vue常用指令及操作
    Vue--Vue实例
    ES6--解构赋值
    ES6--入门
    前端模块化开发
    Node.js--入门
    HTML5--canvas与svg的使用
    input整理
    移动端开发入门
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8287686.html
Copyright © 2011-2022 走看看