Pointers on C(第三章 第四章)

    技术2022-05-20  41

    第三章 数据

     

    1、听上去“长整型”所能表示的值应该比“短整型”所能表示的值要大,但这个假设并不一定成立。

     

          长整型至少应该和整形一样长,而整型至少应该和短整型一样长。

     

          标准没有规定长整型必须比短整型长,只是规定它不得比短整型短。

    2、字符在本质上是小整型值。

     

    3、只有当程序所使用的char型变量的值位于signed char 和 unsigned char的交集中,这个程序才是可以移植的。

     

    4、整型家族9种不同类型:

     

         char     unsigned char     signed char     short     unsigned short     int     unsigned int     long     unsigned long

     

    5、枚举类型

        enum  Jar_Type {CUP,PINT,QUART,HALF_GALLON,GALLON};

     

        enum Jar_Type milk_jug,gas_can,medicine_bottle;

     

        <=> 

     

        enum  {CUP,PINT,QUART,HALF_GALLON,GALLON}

                   Jar_Type milk_jug,gas_can,medicine_bottle ;

     

       

        符号名可以指定特定的整型值:

             

                     enum  Jar_Type {CUP=8,PINT=16,QUART=32,HALF_GALLON=64,GALLON=128};

     

        如果某个符号未显示指定一个值,那么它的值就比前面一个符号名的值大1.

     

     6、规定:所有的浮点类型至少能容纳-10^37~ 10^37之间的任何值。

     

    7、字符串常量(不像字符常量)可以是空的。

     

    8、C数组一个值得关注的地方:编译器并不检查程序对数组下标的引用是否在数组的合法范围内。

     

    9、我自己很不习惯下面的一种格式:

     

        typedef char  * ptr_to_char;

     

        ptr_to_char a;

     

    10、int const a;

           const  int  a;

           没什么区别吧?

     

    11、      int *pi;       //pi是一个普通的指向整型的指针

     

                 int  const  *pi;          //pi是指向整型常量的指针:你可以修改指针的值,但是你不能修改它所指向的值。

     

                 int * const pi;          //pi是指向整型的常量指针:此时指针是常量,它的值无法修改,但是可以修改它所指向的整型的值。

     

                 int const * const pi;     //无论是指针本身还是它所指向的值都是常量,不允许修改。

     

    12、两个非嵌套的代码块:

         

           由于两个代码块的变量不可能同时存在,所以编译器可以把它们存储与同一个内存地址。在任何时刻,两个非嵌套的代码块最多只有一

     

    个处于活动状态。

     

    13、函数名本身并不属于任何代码块。

     

    14、连接属性:

         

           none:总是被当做单独的个体。

           internal:标识符在同一个源文件内的所有声明中都指同一个实体,但是位于不同源文件的多个声明则分属不同的实体。

           external:标识符不论声明多少次,位于几个源文件都表示同一个实体。

     

    15、作用域、连接属性和存储类型总结

       

           变量类型            声明的位置                      是否存储于堆栈                            作用域                                     如果声明为static

           全局                  所有代码                         否                                              从声明处到文件尾                      不允许从其他源文件访问

           局部                  代码块起始处                   是                                              整个代码块                               变量不存储于堆栈中,它的值在程序整个执行期一直保持

           形参                  函数头部                         是                                              整个函数                                  不允许

     

     

    16、在计算机中,如果把指针声明为寄存器变量,程序的效率能得到提高,尤其是那些频繁执行间接访问操作的指针。

     

     

     

    第四章 语句

     

    1、像这样的语句是合法的:

        y+3;

        getchar();

     

    2、printf函数返回它实际打印的字符数。

     

    3、C并不具备布尔类型,而是用整型来代替。

     

    4、else自己从属于离它最近的不完整的if语句。

     

    5、单独用一行来表示空语句是比较好的做法。

     

    6、for语句和while语句执行过程中的区别在于出现continue语句时:

     

         在for语句中,continue语句跳过循环体的剩余部分,直接回到调整部分。

     

         在while语句中,调整部分是循环体的一部分,所以continue将会把它也跳过。

     

    7、switch(expression)

                   statement

        expression 的结果必须是整型值。

     

    8、每个switch语句中只能出现一条default字句。但是,它可以出现在语句列表的任何位置,而且语句会想贯穿一个case标签一样贯穿  default字句。

     

    9、由于break语句只影响包围它的最内层的循环,要想立即从深层嵌套的循环中退出的办法:

        1)、使用goto语句

        2)、设置一个状态标识,在每个循环中都必须进行测试:

                enum {EXIT,OK} status; ... status=OK; while(status==OK&&condition1){ while(status==OK&&condition2){ while(condition3){ if(some disaster){ status=EXIT; break; } } } }

     

        3)、可以使用return语句离开这个函数。

     

    10、库函数属于编译器?

     


    最新回复(0)