C和指针学习笔记:第二~五章:基本概念 、数据、语句、操作符和表达式

第二章:基本概念

  1. 翻译过程:编译(预处理、解析、优化)和链接
  2. 函数局部变量存储于堆栈(动态分配内存),静态变量则存储在静态内存
  3. 三字母词,e.g., ??( 表示 [
  4. 注释不能嵌套

第三章:数据

  1. 四种基本数据类型:整型、浮点型、指针、聚合类型
  2. 整形字面值后缀:L/l 表示long, U/u表示unsigned
  3. 整形字面值前缀:0开头表8位数,0x开头表16位数, L表宽字符常量
  4. 枚举类型:提高程序的可读性和可维护性
#include <stdio.h>

enum Months{Jan=1, Feb, Mar, Apr, May, Jun, July, Aug, Sep, Oct, Nov, Dec};

int main(void)
{
    enum Months m;
    int flag = 1;
    char *months[] = {"January","February","March","April","May","June",
                       "July","August","September","October","November","December"};

    for( m = Jan; m <= Dec; m++,flag++)
    {
        printf("%dm:%-10s", m, months[m-1]);
        printf((flag % 4 == 0) ? "\n":"");
    };

    return 0;

}
  1. 指针:在后续章节再写吧
  2. typdef:专门用于给数据类型定义新名字,优先使用它而不用define
  3. static:
    • 函数的声明和定义方式默认都是 extern 的, 即函数默认是全局的
    • 变量的声明和定义方式默认都是局部的, 在当前编译单元或者文件内可用
    • static修饰的 function 表明这个函数只对于当前文件中的其他函数是可见的, 其他文件中的函数不能够调用.
    • 使用 static 和 extern 修饰变量的时候, 变量的生命周期是一样的, 不同的是变量的作用域.
关键字生命周期作用域
extern静态(程序结束后释放)外部(整个程序)
static静态(程序结束后释放)内部(仅编译单元,一般指单个源文件)
auto,register函数调用(调用结束后释放)

第四章:语句

  1. do while:至少需要一次执行时使用
  2. switch记得写break和default
  3. goto适合跳出多层循环
//根据标志位break跳出多层循环
#include <stdio.h>

int main(void)
{
    int i,j,k;
    int flag = 0;
    for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10; j++)
        {
            for(k = 0; k < 10; k++)
            {
                if (i == 3 && j == 3 && k == 3) { flag = 1; }
                if (flag == 1) { break; }
            }
            if (flag == 1) { break; }
        }
        if (flag == 1) { break; }
    }
    printf("%d %d %d", i, j, k);

    return 0;
}


//goto跳出多层循环
int main(void)
{
    int i,j,k;
    for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10; j++)
        {
            for(k = 0; k < 10; k++)
            {
                if (i == 3 && j == 3 && k == 3) { goto PRINT_I_J_K;}
            }
        }
    }
    
    PRINT_I_J_K:
        printf("%d %d %d", i, j, k);

    return 0;
}

第五章:操作符和表达式

  1. 算术操作符:+ - * 、 %
  2. 位移操作:
    *左移<<:值左边丢弃,右边填0
    *右移>>: 逻辑移位(丢弃&填0)和算术移位(为保持正负性不变,所有填充位与原先符号位一致)
    • 对于有符号数来说,右移是逻辑还是算术移位由编译器决定
/*计数位为1的次数*/
#include <stdio.h>

int count_ones_bits( unsigned value)
{
    int ones;

    for( ones = 0; value != 0; value = value >> 1)
    {
        if( value % 2 != 0) { ones ++; }
    }

    return ones;
}

int main(void)
{
    int val,ans;
    val = 5;
    ans = count_ones_bits(val);
    printf("there are % bits of one in value : %d", ans, val);
    return 0;
}
  1. 位操作符 & | ^ : 与、或、异或
//数值交换
int a,b;

//solution 1:
int temp = b;
b = a;
a = temp;

//sloution 2:
a = a + b;
b = a - b;
a = a -b;

//solution 3:
a = a ^ b;
b = b ^ a;
a = a ^ b;
  1. 条件操作符号expression1 ? expersion2 : expersion3
  2. C语言无bool类型,用0,1代替
  3. 左 / 右值:能出现在赋值符号(=)左 / 右边的东西
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ColaForced

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值