C语言基础知识

前言

本文内容基于 C-primer-plus (第六版), 所有代码基于C 99协议由GCC v10.2.0编译在Arch Linux 64位系统可以运行

主要介绍C语言的基础语法知识

  • 概述
  • 字符串格式化输入/输出
  • 运算符,语句
  • 循环 for, while, do while
  • 流程控制 if else, 三目运算符 ? :
  • 缓冲,重定向
  • 递归和函数
  • 指针和数组
  • 字符串处理
  • 存储类型
  • 文件操作
  • 结构体

一、C 语言基础知识

1.概述

根据 C 11 协议标准,C语言中有六种语句

1.标号语句

goto, casedefault 是在 switch 中使用的标号语句.

goto 在结构化程序设计并不建议使用,容易造成程序的结构混乱,代码难以维护和调试,不易理解

2.复合语句

由`{}`括号以及一条或多条语句的组合
1
2
3
4
{//一对花括号
printf("hello word!");
getchar();
}

3.表达式语句

表达式语句由 ; 分号结尾
一条语句可以只有一个 ;,表示什么都不做
;

4.选择语句

if && switch,可以根据某些条件改变程序原有的执行顺序和流程

5.迭代语句

for, while, do while,用于执行重复且相同的指令

6.跳转语句

  • 无条件跳转到指定位置

将控制权限返还给上一级调用函数

用来从 switch 或 循环中跳出一层

只能出现在循环体中,跳过本轮循环剩余代码,提前进入下一轮循环

用来在函数内跳转到指定标识符位置

2. main 的两种标准表示方法

1
2
3
4
5
int main (void){
}// 第一种

int main (int argv, char * argc){
}// 第二种

3. 两种注释方法

1
2
//第一种
/* 第二种*/

4. 关键字

有一些关键字是 c90c99新增

autoexternshortwhiel
breakfloatsigned(c90)_Alignas(c99)
caseforsizeof_Alihnof(c99)
chargotostatic_Atomic(c99)
const(c90)ifstruct_Bool(c99)
continueinlineswitch_Complex(c99)
defaultinttypedef_Generic(c99)
dolongunion_Imaginary(c99)
doubleregisterunsingned_Noreturn(c99)
elserastrictvoid_Static_assert(c99)
enum(c90)returnvolatile(c90)_Thread_local(c99)

5. 函数

函数是C语言最基本的结构,在 c90 标准中新增了函数原型

函数原型

就是对函数的返回值和参数进行描述

1
2
3
4
5
6
7
8
9
10
/*
@sum
*/int sum (a, b); //函数原型

int main (void){
sum (1, 2); //函数调用
}
int sum (a, b){ //函数定义
return a + b;
}

6. 参数

参数分为两种

sum(a, 2);

这里函数 sum 有两个参数
参数 a 是一个变量
参数 2 是一个实际的值

总结:

所以可以看出形参其实指的是变量,而实参则指的是实际的数值

7. 数据类型

C语言分为两大类型的数据

  1. 整数
  • int, short, long, long long

  1. 浮点数
  • float, double

_Bool 类型 (C99)

C99添加的新的类型,用于表示布尔值 true,false
占用 1位 存储空间

可移植类型

  • 可移植是C语言的一个重要特点之一
    C语言没有强制要求每种数据类型的具体长度而是 严格要求每种数据类型的最少长度
    • 这样要求就使得在不同平台下的数据类型的长度不会小于最小值
      • 比如说使用 inttypers.h中的 uint32_t(定义为无符号32位整型),也就是在不同的系统中可能是 unsingned int 也可能是 unsingned long但是C语言都能保证它绝对能存储对应的数据