c语言学习–1

欢迎来到c语言学习,本篇是c语言学习的第一篇,主要介绍c语言的基础知识,包括c语言规范 、变量、常量、运算符、控制语句、函数、数组、字符串等。

一,c语言规范

以下是阿里c语言规范

1. 缩进

  • 使用空格进行缩进,每次缩进4个空格
  • 代码块的分界符(如大括号)前后都需要加空格
  • 条件语句、循环语句、函数定义等语句的左大括号前不加空格,右大括号独占一行
1
2
3
4
5
if (condition) {
// do something
} else {
// do something else
}

2. 命名

  • 变量名、函数名、宏定义等遵循驼峰命名法,如myVariablemyFunctionMY_MACRO
  • 常量名、宏定义等全部大写,单词之间用下划线分隔,如MY_CONSTANTMAX_VALUE
  • 函数名和变量名不要使用保留字
1
2
3
4
5
int myVariable = 10;
void myFunction() {
// do something
}
#define MAX_VALUE 100

3. 注释

  • 使用//进行单行注释,使用/* */进行多行注释
  • 注释内容要简洁明了,不要包含多余的空格或换行符
  • 注释要放在代码的上方或右侧,不要放在代码的中间或下方
1
2
3
4
5
// 这是一个单行注释
/*
* 这是一个多行注释
*/
int myVariable = 10; // 这是一个变量

4. 代码风格

  • 代码风格要统一,不要混用不同的风格
  • 代码行长度不要超过80个字符,超过的部分可以使用换行符进行分割
  • 代码块之间要留出空行,以增加可读性
1
2
3
4
5
int myVariable = 10;
// 这是一个变量
void myFunction() {
// do something
}

5. 代码审查

  • 在代码提交之前要进行代码审查,检查代码是否符合规范,是否存在错误或漏洞
  • 学会使用ai
  • 代码审查时要关注代码的可读性、可维护性、安全性等方面

6. 避免魔法数字

  • 避免在代码中使用魔法数字,即直接使用数字常量,而是使用有意义的变量或常量来代替
  • 这样可以提高代码的可读性和可维护性
1
2
3
4
5
6
7
8
9
10
11
// 魔法数字
int myArray[10];
for (int i = 0; i < 10; i++) {
myArray[i] = i * 2;
}
// 使用常量代替魔法数字
const int ARRAY_SIZE = 10;
int myArray[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; i++) {
myArray[i] = i * 2;
}

7. 避免重复代码

  • 避免在代码中重复编写相同的代码,可以使用函数、宏定义、模板等手段来减少重复代码
  • 这样可以提高代码的可读性和可维护性
1
2
3
4
5
6
7
8
9
10
11
12
13
// 重复代码
void printHello() {
printf("Hello, world!\n");
}
void printGoodbye() {
printf("Goodbye, world!\n");
}
// 使用函数代替重复代码
void printMessage(const char* message) {
printf("%s\n", message);
}
printMessage("Hello, world!");
printMessage("Goodbye, world!");

二,变量

变量是程序中用于存储数据的容器。在C语言中,变量必须先声明后使用,并且每个变量都有一个特定的类型,用于指定它可以存储的数据类型。

声明变量时,需要指定变量的类型和变量名。例如,以下代码声明了一个名为myVariable的整数变量:

1. 整数

这里先了解数字在电脑的存储方式

例如:
3:00000011
-3:11111101

这里的首位是符号位,0表示正数,1表示负数
当为unsigned 时,就没有符号位

一个字节(8位)可以表示256个数,-128~127

像int 4个字节,二进制位数为32位,可以表示2^32个数,-2^31~2^31-1

类型 存储大小 描述
int 4字节 32位有符号
short int 2字节 16位有符号
unsigned int 4字节 32位无符号
unsigned short int 2字节 16位无符号
long long int 8字节 64位有符号
unsigned long long int 8字节 64位无符号

2. 浮点数

类型 存储大小 范围
float 4字节 1.2E-38 到 3.4E+38
double 8字节 2.3E-308 到 1.7E+308
long double 16字节 3.4E-4932 到 1.1E+4932
1
2
3
float myFloatVariable;
double myDoubleVariable;
long double myLongDoubleVariable;
3. 字符
类型 存储大小 范围
char 1字节 -128 到 127 或 0 到 255
1
char myCharVariable;

4. 布尔值

类型 存储大小 范围
_Bool 1字节 0 或 1
1
_Bool myBoolVariable;

5. 指针

上面基础数据类型加*就是指针类型,指针是指向内存地址的变量,用于存储变量的地址。指针类型由基础数据类型加上*号表示,例如:

1
int* myVariable;

三,常量

常量是程序中固定不变的值,一旦定义就不能修改。在C语言中,常量可以分为字面常量和符号常量。使用const关键字可以定义常量。

1. 字面常量

字面常量是直接在代码中出现的常量值,例如:

1
const int myVariable = 10;

2. 符号常量

符号常量是通过#define指令定义的常量,例如:

1
#define PI 3.14

四,运算符

运算符是用于对变量和常量进行运算的符号。C语言中包含多种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。

运算符 描述 类型
+ 加法运算符 算术运算符
- 减法运算符 算术运算符
* 乘法运算符 算术运算符
/ 除法运算符 算术运算符
% 取模运算符 算术运算符
== 等于运算符 关系运算符
!= 不等于运算符 关系运算符
> 大于运算符 关系运算符
< 小于运算符 关系运算符
>= 大于等于运算符 关系运算符
<= 小于等于运算符 关系运算符
&& 逻辑与运算符 逻辑运算符
! 逻辑非运算符 逻辑运算符
& 按位与运算符 位运算符
| 按位或运算符 位运算符
^ 按位异或运算符 位运算符
~ 按位取反运算符 位运算符
<< 左移运算符 位运算符
>> 右移运算符 位运算符

优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 位运算符

五,控制语句

控制语句用于控制程序的执行流程,包括条件语句、循环语句和跳转语句。

1. 条件语句

条件语句用于根据条件的真假来执行不同的代码块。C语言中常用的条件语句有ifif-elseswitch

1
2
3
4
5
if (condition) {
// 如果条件为真,执行这里的代码
} else {
// 如果条件为假,执行这里的代码
}
1
2
3
4
5
6
7
8
9
10
11
switch (expression) {
case value1:
// 如果表达式等于value1,执行这里的代码
break;
case value2:
// 如果表达式等于value2,执行这里的代码
break;
default:
// 如果表达式不等于任何case,执行这里的代码
break;
}

2. 循环语句

循环语句用于重复执行一段代码块。C语言中常用的循环语句有forwhiledo-while

1
2
3
for (initialization; condition; increment) {
// 执行这里的代码
}
1
2
3
while (condition) {
// 执行这里的代码
}
1
2
3
do {
// 执行这里的代码
}while (condition);

注意,do-while循环至少会执行一次代码块,而while循环可能一次也不执行。

3. 跳转语句

跳转语句用于改变程序的执行流程,包括breakcontinuegoto

1
2
3
break; // 跳出循环
continue; // 跳过当前循环的剩余代码,继续下一次循环
goto label; // 跳转到指定的标签处

六,函数

函数是一段可重复使用的代码块,用于执行特定的任务。C语言中函数分为库函数和用户自定义函数。

1. 库函数

库函数是C语言标准库中提供的函数,可以直接在程序中使用,例如printfscanf等。

1
printf("Hello, world!\n");

2. 用户自定义函数

用户自定义函数是用户根据需要编写的函数,用于执行特定的任务。函数的定义包括函数名、参数列表和函数体。

1
2
3
int add(int a, int b) {
return a + b;
}

这里的int表示函数的返回类型,add是函数名,(int a, int b)是参数列表,return a + b是函数体。
调用函数时,需要提供与函数定义中参数列表匹配的参数。例如:

1
2
int result = add(3, 4);
printf("%d\n", result);

这里的add(3, 4)是函数调用,将3和4作为参数传递给add函数,并将返回值赋给result变量。

注意,函数使用的是值传递,即函数内部对参数的修改不会影响到函数外部的变量。如果需要修改参数的值,可以使用指针或引用。具体在指针讲述。

七,数组

1
int myArray[10]; // 声明一个包含10个整数的数组

变长数组

1
2
int n = 10;//这里要C99标准
int myArray[n]; // 声明一个包含n个整数的数组
1
int* myArray=(int*)malloc(sizeof(int)*n); // 声明一个包含n个整数的数组5个整数的数组,并初始化, 这里可以不用c99标准

多维数组

1
int myArray[3][4]; // 声明一个3行4列的二维数组

注意,你可能听说不省略写数组长度,但是只有第一维可以省略,其他维数不能省略,例如:

1
int myArray[][4]; // 声明一个3行4列的二维数组

八,字符串

在C语言中,字符串是由字符组成的数组,以空字符(‘\0’)结尾。字符串可以存储在字符数组中,例如:

1
char myString[] = "Hello, world!";

注意,字符串的长度包括空字符,因此上面的字符串长度为13。

字符串操作函数:

  1. strlen:计算字符串的长度,不包括空字符。
  2. strcpy:复制字符串。
  3. strcat:连接字符串。
  4. strcmp:比较字符串。
  5. strchr:查找字符串中的字符。

严格意义将,字符串不是一种数据类型,而是一种字符数组。在其他编程语言中,字符串才是一种单独的数据类型,例如Python中的字符串。

你可以想想’\0’的妙用。

结语

c语言学习篇一结束,你已经掌握了c语言的几乎所有基础知识,下一篇可以开始学习指针、结构体、文件操作等。
注意,c语言学习可以考练习,要多练习写代码。(推荐上力扣 刷题)