zoukankan      html  css  js  c++  java
  • C和指针学习笔记--第三章

    1.基本数据类型:整型,浮点型,指针和聚合类型(如数组和结构体)
    2.整型分为:字符型,短整型,整型和长整型,他们都分为有符号和无符号两种。
    3.对于char类型,本质上是小整型值。char的默认类型就取决于编译器,为了提高程序的可移植性和效率,通常把存储与char类型的值限制在signed char和unsigned char的交集内。
    4.可以通过查看limits.h文件来查看各个变量的范围
    5.初始化整型常量的时候,可以在数值后面添加后缀来改变缺省的规则,例如:u和L等
    如果一个多字节常量前面出现‘L’则表示一个宽字节常量,例如:L‘X’
    6.如果一个常量用于确定一个字中的某些特定位的时候,将其写成16进制;如果一个常量用于表示一个字符的时候,将这个值表示为字符常量更合适。
    7.枚举类型实际上就是整型,其中每个符号常量可以被赋值。
    8.浮点数在缺省情况下都是double类型,可以在数值的后面跟一个L(表示long double类型)或者一个f(表示float类型);在声明的时候除了long double 之外,其余的说明符(short, signed,unsigned)都不可用。
    9.在ANSI C中对字符串常量的修改,其效果是未定义的。
    10.相等的整型声明
    11.如果数组的下标是由那些已知的正确的值计算出来的,则不用进行下标检查,如果是从用户输入的数据产生的则需要检查下标是否越界。
    12.使用typedef来创建新类型的名字而不是使用#define,因为后者无法处理指针类型,例如:
    #define d_ptr_to_char char*
    d_ptr_to_char a,b //其中a为指针类型,b为字符类型
    还可以像如下方式使用:
    typedef __int8 int8_t;
    typedef unsigned __int8 uint8_t;
    13.指向整型常量的指针:int const *p
    指向整型的常量指针:int *const p
    指向整型常量的常量指针:int const * const p

    const永远修饰其右边的内容,除非右边没有东西;
    14.作用域:
    代码块作用域:在代码块(位于一段花括号之间的所有语句)开始位置声明的标识符
    注意:如果内层代码块有与外层代码快名字相同的表示符,则外层的那个标识符则在内层无法访问。
    文件作用域:在代码块之外声明的标识符都具有文件作用域,包括函数名。
    原型作用域:在函数原型中声明的标识符具有原型作用域。
    函数作用域:
    15.链接属性----决定在如何处理不同的文件中出现的相同标识符
    外部属性(external):具有external属性的标识符无论声明了多少次,在不同的源文件中表示不同的实体。只要变量不是声明在代码块内部或者函数定义内部(属于文件作用域),其在缺省情况下的链接属性就是external;如果声明在代码块内部并且在其前面添加extern关键字将使它引用全局变量而非局部变量。同时,就有external链接属性的实体总是有静态存储类型。
    内部属性(internal):具有internal属性的标识符在同一个文件中的所有声明指向同一个
    实体,但是位于不同的原文中的不同声明指向不同的实体。无属性(none):没有链接属性的标识符每次声明都表示不同的实体。
    16.存储类型----决定变量何时创建,何时销毁和它保存多久,变量的缺省类型取决于声明的位置
    静态(static)变量:在任何代码块之外声明的变量为静态变量,总是存储在静态内存中,这样的变量在程序运行之前就创建,在整个程序运行期间都存在,直到程序结束。
    自动(auto)变量:在代码块内部声明的变量为自动变量,存储在堆栈中,在执行到代码块中
    声明变量的时候创建,在代码块执行完毕之后被销毁。
    注意:如果给自动变量前面加上static关键字,则该变量从自动变成静态的。
    寄存器(register)变量:使用关键字register声明的自动变量,创建时间和销毁时间与自动变量相同,但是使用寄存器变量的函数在返回之前,原来存储在寄存器中的值必须要恢复,确保调用者的寄存器变量未被破坏。
    17.自动变量和静态变量的初始化
    静态变量:在程序加载到内存中之前,将静态变量的值放到程序执行时使用的变量的内存位置,完成这个任务并不需要额外的时间和指令,如果静态变量没有初始值,则其缺省值为0.
    自动变量:需要更多的开销。初始化语句相当与一条赋值语句。
    (1)初始化语句相当于赋值语句效率并没有提高
    (2)初始化语句可以重复执行
    (3)可以使用表达式值作为初始化值
    (4)除非对自动变量进行显示初始化,否则其值将是垃圾值。
    18.static关键字总结
    (1)当其用于函数定义和代码块外部的变量声明时,static关键字修改其链接属性,从external变成internal,变量的存储类型和作用域不改变,这样使函数名和变量名只能在该文件中使用。
    (2)当其用于代码块内部的变量的声明时,将自动变量改为静态变量,但是变量的链接属性和作用域不变。

  • 相关阅读:
    深度卷积网络中如何进行上采样?
    权重衰减(weight decay), L2正则
    python中的super().__init__()
    随机变量的间独立性及其传播
    卡尔曼滤波、扩展卡尔曼滤波、无迹卡尔曼滤波以及粒子滤波原理
    贝叶斯推断中的后验概率、似然函数、先验概率以及边际似然定义(转)
    详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解(转)
    python告警发微信
    python模块operator操作符函数
    Django之CSRF验证。
  • 原文地址:https://www.cnblogs.com/anitaguangzi/p/13843389.html
Copyright © 2011-2022 走看看