C语言基础(L1-L5)

L1:变量

  1. char =1Byte
  2. short =2Byte
  3. int =4Byte

L2:auto static register

  1. auto 局部变量的默认属性
    存储于程序的
  2. static 修饰的局部变量存储在程序静态区(全局区),变量不在栈上面,只会被初始一次。
    static修饰的全局变量作用域只是声明的文件中,不能被别的文件所调用。
    static修饰的函数作用域只是声明的文件中,不能被别的文件调用
  3. register 关键字指明将变量存储于寄存器中
    register只是请求寄存器变量,但不一定请求成功
    register变量必须是CPU寄存器可以接受的值
    不能用&运算符获取register变量的地址

L3:if switch do while for

if

  1. else 匹配前面最近的if语句
  2. c语言没有标准的bool值类型 ,if使用bool时 直接放入表达式,不要进行比较 if(b)–>ok if(b==1) –>有可能出错
  3. 普通变量和0值进行比较时,0值应该出现在符号左边
    if(0 == i) ….
  4. float 变量不能直接进行0值比较,需要定义精度
#define E 0.00000001
float f =5.0;
if((5-E<=f)&&(f<=5+E)) //比较f是否==5
{
    //statement 1;
}
else
{
   //statement 2;
}

switch

  1. case语句中值只能是整型或字符型
  2. 不适合范围判断

循环(while for)

  1. break表示终止循环的执行,跳出块(switch 循环)的执行
  2. continue表示终止本次循环体,进入下次循环执行
  3. switch 中能否使用continue –》不能,switch中无循环
  4. do break配合使用 ,确保函数中只有一个分配资源的地方 和一个释放资源的地方 ,利用do while(0) 确保执行,利用break跳出不符合的情况,跳出后统一释放,保证不会出现内存泄露
int func(int n)
{
    int i = 0;
    int ret = 0;
    int* p = (int*)malloc(sizeof(int) * n);

    do
    {
        if( NULL == p ) break;

        if( n < 0 ) break;

        for(i=0; iprintf("%d\n", p[i]);
        }

        ret = 1;
    }while(0);

    free(p);

    return 

L4:void extern sizeof

  1. goto 禁用
  2. void 无
    void * 指针作为左值用于“接收”任意类型的指针
    void * 指针作为右值赋值给其他指针时需要强制类型转换
  3. extern
    用于声明外部定义的变量和函数
    用于告诉编译器用C方式编译
extern "C"
{
   int f(int a,int b)
   {
       return a+b;
   }
}
  1. sizeof 是编译器的内置指示符 ,不是函数
printf(“%d”,sizeof  a);
printf("%d",sizeof (a));

L5:const 和volatile

const

1.const 修饰的变量是只读的,不可作为左值,但是可以通过指针修改。不是常量 ,是常量
2.const 修饰指针

const int* p ; //p可变,p指向的内容不可变
int const *p ; //p可变,p指向的内容不可变
int* const p ; //p不可变,p指向的内容可变
const int* const p ; //p和p指向的内容不可变

口诀: 左数右指
当const 出现在*左边时指针指向的数据为常量
当const 出现在*后右边时指针本身为常量

const修饰函数参数表示在函数体内不希望改变参数的值
const修饰函数返回值表示返回值不可改变,多用于返回指针的情形

volatile

  1. 用于告诉编译器必须每次去内存中去变量值
  2. 主要修饰可能被多个线程访问的变量
  3. 可以修饰可能被未知因数改变的变量

你可能感兴趣的:(C)