C语言知识点总结

First Post:

Last Update:

Word Count:
999

Read Time:
4 min

这是我主持的OurEDA的例会内容整理

点击 下载 本次沙龙 PPT

变量

常用变量表(看看就好有个印象就行)

类型 含义 32位编译器中大小(一般) 64位编译器中大小(一般) 最小值(32位) 最大值(32位)
bool 布尔类型 1byte 1byte false true
char 单个字符 1byte 1byte -2^7^ 2^7^-1
short 短整形 2byte 2byte -2^15^ 2^15^-1
int 整形 4byte 4byte -2^31^ 2^31^-1
long 长整形 4byte4byte 8byte -2^31^ 2^31^-1
long long 长整形 8byte 8byte -2^63^ 2^63^-1
float 单精度浮点数 4byte 4byte -2^127^ 2^128^
double 双精度浮点数 8byte 8byte -2^1023^ 2^1024^
long double 扩展精度浮点数 12byte 16byte -2^16383^ 2^16384^
char* 字符常量或字符串常量 4byte 8byte 无意义 无意义
类型 有效位数计算 有效位数
float 223+1=16,777,216 8-1=7
double 252+1=9,007,199,254,740,992‬ 16-1=15
long double 280+1=2.410 24 / 2112+1=1.0381034 25-1=24 / 35-1=34

一些注意事项

  • 数字默认是 double
  • 字符串默认是const char*

特殊前缀

1
2
3
4
extern int a;  // 声明一个int类型的变量a,一般用在.h文件中声明项目全局变量
const int b=1; // 定义一个不可变的变量b,使用const关键字都要赋初值
static int c=1; // 在函数中使用,只在第一次使用时初始化,相当于作用域在函数内的全局变量
typedef long long int; // 把long long当作int使用

变量作用域

  • 局部变量

  • 全局变量

字符串

字符串在c语言中有两种形式char*和char[],这里简单分辨下两者之间的不同。

“HelloWorld!”是字符串常量,不可修改。

  • char* c1=”HelloWorld!”中,c1指向代码段中的常量,只读不写,且常量相同,指向的地址也相同。
  • char c2[]=”HelloWorld!”中,c2指向堆栈段中的数据,可读可写,相当于把代码端的数据拷贝了出来。

结构体

结构体可以看作是一种几个基础类型复合的类型。

语句

条件语句

  • if - else - if else

    if依据后面的条件语句的结果进行判断,非0为真,0为假

    if会优先和近的else组合

    1
    2
    3
    4
    5
    6
    if()
    //...
    else if()
    //...
    else
    //...
    1
    2
    3
    4
    5
    6
    if()
    //...
    if()
    //...
    else
    //...
  • switch - case - default

    注意:每种情况下都要有break,否则将会持续执行。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch(ch){  
    case 'a':
    //...
    break;
    case 'b':
    //...
    break;
    default:
    //...
    }

循环语句

  • while

    先判断,再执行

    while 依据后面语句的结果进行判断,非0为真,0为假

  • do while(见得较少)

    不判断,先执行一次

  • for

    先判断,再执行

    适用于控制执行的次数

跳转语句

  • break

    跳出当前语句({})

  • continue

    条件语句 中表示什么都不做(替代空语句);

    迭代语句 中表示 直接进入下一轮循环,不执行完当前循环

  • goto(非常非常不建议,不过学的时候可以试着玩一下)

    goto任意位置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
    for (int k=0; k<o; k++) {
    if (跳出条件) {
    goto end;
    }
    }
    }
    }
    end:
    //...

函数

  • 函数结果

    返回类型 函数名(形式传入参数)

    {

    ​ 函数体;

    ​ return ();

    }

  • return 在 dfs 等算法中用于回溯

  • 内联函数 inline

    提高程序执行效率(整体代换而不是用函数调用)

    1
    2
    3
    4
    inline char *dbtest(int a)
    {
    return (a % 2 > 0 ? "奇" : "偶");
    }

指针

  • &

  • 常量指针(不能修改指针指向地址中的值)

  • 指针常量(不能修改指针的值)

  • 常量指针常量(既不能修改指针指向地址中的值,又不能修改指针的值)

  • 结构体指针变量( . / -> )

  • 数组与指针

    数组的变量名就是该数组的首地址

    数组的下标就是地址的位移量

scanf 与 printf

  • scanf(“输入格式”,变量地址);
  • printf(“输出格式”,变量);