• C语言学习笔记(三)


    1.函数形参求值顺序:

      int i = 2;

      max(i, i++);

      a.若顺序从左到右则为max(2, 2);

      b.若顺序从右到左则为max(3, 2);

      要写与求值顺序无关的函数。

    2.函数值传递特点:

      a.形参与实参占有不同的内存单元;

      b.单向传递。

    3.extern可以扩展函数的作用域,不管是在同一文件中还是在不同文件中。

    4.const的用法:

      a.修饰函数参数,表明此参数不可更改

      b.修饰普通变量,表明此变量不可更改

      c.修饰指针变量,(分两种)

      example:

        (1)const int *p = &a; 等同于  int const *p = &a;

          代表指针p所指向的值不能被修改。

        (2)int* const p = &a;

          代表指针p不能被修改。

        区分方法:看"const"在"*"前面还是后面。

    5.static的用法:

      a.限定变量的作用域

      b.设置变量的存储域

    6.用联合体判断CPU是大端还是小端:

      int is_endian()

      {

        union A{

          int a;

          char b;

        }B;

        B.a = 0x01;

        printf("%d ",B.b);

      }

     

    7.数组和指针:

      a.分析char *a;

        (1)char * : 去掉了a, 变量的类型(指针)。

        (2)char :    去掉了*a, 指针所指向的类型。

      b.int *p1[10] (指针数组)

       int (*p2)[10] (数组指针,指向一个数组,每个数组元素都是int类型)。

      c.char a[5];

        (1)char (*p1)[5] = &a;(正确)

        (2)char (*p2)[5] = a;  (错误)

        (3)char *p = a;           (正确)

        这里a代表数组首元素的地址,即&a[0]。分清数组首元素地址和数组地址的分别。

      d.如果出现指针不兼容警告,那么指针的类型应该跟随左操作数。

    8.变量的作用域:

      a.C编译器进行了优化:变量在没有使用之前是不分配内存的。比如两个文件中同时定义了全局变量int a;因为它们没有分配内存,所以在使用时不会出错。如果同时定义了int a = 1; int a = 2;那就错了。最好在全局变量前加上static。

      b.块变量:某个语句块运行时存在。

      c.静态局部变量具有全局生存期,但他的作用域还是函数作用域。

      d.所有静态存储区或全局存储区的变量若无显式赋值,则系统自动赋值为零。

     

  • 相关阅读:
    java提高篇(四)-----抽象类与接口
    hdu1004----用java链表实现
    jkfladsdjfkldsa
    Handler_1
    Handler实现线程间的通信2
    Handler实现线程间的通信1
    Handler基本运行机制
    Android线程
    Activity声明周期2
    Activity声明周期1
  • 原文地址:https://www.cnblogs.com/huanchao/p/3470374.html
Copyright © 2020-2023  润新知