搞怪的不是红绿灯,不是时机,而是我数不清的犹豫。
前言
这是我学习C语言的第一份笔记,有关C语言基础语法的知识。后期我会继续将C语言知识的笔记补全。
编译和链接
相关概念
1. C语言是一门编译型计算机语言,C语言源代码都是文本文件,文本文件本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。
2. C语言代码是放在 .c 为后缀的文件中的,要得到最终运行的可执行程序,中间要经过编译和链接两个过程。
3. 把.c 为后缀的文件称为源文件,把 .h 为后缀的文件称为头文件。
4. 每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件)。
5. 多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)。
基础函数
main()函数
相关概念
1. main()函数是程序的入口,即使⼀个项目中有多个.c文件,但是只能有⼀个main()函数。
2. main()函数包含在标准输入输出库中,使用前需要引入<stdio.h>头文件。
示例
int main()
{
return 0;
}
标准库函数
相关概念
1. 引入标准输入输出库后,就可以使用里面的函数,有printf(),main(),scanf()等函数。
示例
#include <stdio.h>
printf()函数
占位符
1. 这里的 %d , %c 等是占位符,会被后边的值替换。
2. printf()后面的占位符与参数一一对应。
#include <stdio.h>
int main()
{
printf("%s\n","hello");//打印字符串时,"%s"。
printf("%c\n", 'h');//打印字符时,"%c"。
printf("%d\n", 55);//打印整形时,"%d"。
printf("%f\n", 55.5);//打印单精度浮点型时,"%f"。对应float
printf("%lf\n", 55.5);//打印双精度浮点型时,"%lf"。对应double
return 0;
}
限制宽度
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
float a = 5.13;
printf("%12f", a);//"%nf"中n代表最小宽度,默认右对齐(左边不够补空格)
return 0;//小数点后默认6位
}
// 5.130000(4+2+6=12)
限定小数位数
#include <stdio.h>
int main()
{
printf("Number is %.2f\n", 0.5);//%.nf限制小数点后n位
return 0;
}
//Number is 0.50
scanf()函数
相关概念
1. 参数前面有 & 符号。
2. 占位符是什么格式,后面输入时格式要求和占位符相同。(不要用\n!!!)
3. 使用前需要加入宏定义:#define _CRT_SECURE_NO_WARNINGS。(否则报错!)
4. scanf()在读取输入的内容时,如果遇到第一个空白(空格或者换行)时,就不再读取了。
示例
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int score=0;
scanf("%d", &score);
printf("%d",score);
return 0;
}
其他概念
关键字
1.C语言一共有32个关键字。(不能自己单独定义)
2. 在C99标准中加入了 inline 、 restrict 、_Bool 、_Complex 、 _Imaginary 等关键字。
3. https://zh.cppreference.com/w/c/keyword(C语言关键字的全部介绍)
字符与ASCLL编码
1. ASCLL编码展示了字符是怎样以二进制在电脑中进行储存的。
2. A--65 a--97(小写字符的ASCLL码更大)。
3. 0-31号字符无法被打印出来。
4. ASCLL码一共有0-127号,一共128个。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
printf("%d\n", 81);//81
printf("%c\n", 81);//Q
return 0;
}
转义字符
1. \n :换行符。
2. \0 :null 字符,代表没有内容,用于字符串的结束标志,其 ASCII码值是0。
3. \ddd:ddd表示1-3个八进制数字。
4. \xdd:dd表示1-2个十六进制数字。
字符串
1. 使用双引号括起来的⼀串字符就被称为字符串。
2. 字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串的结束标志。
3. 字符串的打印格式可以使用 %s 来指定,也可以直接打印。
#include <stdio.h>
int main()
{
printf("%s\n", "hello C");
printf("hello c");
return 0;
}
数据类型
数据类型的分类
内置类型
- 字符型 char
- 整形 int
- 浮点型 float
- 布尔类型 bool (布尔类型的使用得包含头文件 <stdbool.h>)
整形 int
1. 整形变量的范围是:-32768~32767。
2. 整形变量在计算机中以二进制储存,但是为了使用可以表示成其他进制。
3. 八进制:0开头(010)。
4. 十六进制:0X开头(0X10) 。
整数溢出
1. 当整形变量存储的数值超过了其所能表示的范围时,会从起点从新开始。
2. 起点不一定是0,有可能是负数。
3. 发生整数溢出时候,编译器不会报错。
自定义类型
- 数组 arr
- 结构体 struct
- 枚举体 enum
- 联合体 union
数据类型的长度
sizeof()操作符
1. sizeof()计算结果,单位是字节。(bit--Byte--KB--MB--GB)
2. sizeof()是操作符,不是独立的函数。
3. sizeof()返回值类型是size_t,即无符号整形。
4. sizeof()如果用来统计字符串长度,则会把'\0'也统计进去。
5. sizeof()中表达式不计算。
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(long));
printf("%zd\n", sizeof(3+5));
printf("%zd", sizeof("hello world"));
return 0;
}
#include <stdio.h>
int main()
{
short s = 2;
int b = 10;
printf("%zd\n", sizeof(s = b+1));
printf("s = %d\n", s);//2
return 0;
}
strlen()函数
1. strlen()函数统计结束的标志是'\0'。
2. strlen()函数如果用来统计字符串长度,则不会把'\0'统计进去。
3. 由于一个字符就是一个字节,所以统计的就是字符串中字符的个数。
4. 需要引入<string.h>头文件。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
printf("%d\n", strlen("hello"));//5
printf("%zd\n", sizeof("hello"));//6
return 0;
}
强制类型转换
1. 格式:(目标类型)变量;
2. 在使用前要考虑它会怎么约值。
#include <stdio.h>
int main()
{
float a = 12.3;
printf("%d", (int)a);//12
return 0;
}
变量
变量的分类(适用范围)
1. 全局变量( i ),全局变量是放在内存的静态区。
2. 局部变量( a ),局部变量是放在内存的栈区。
3. 其实当局部变量和全局变量同名的时候,局部变量优先使用。
#include <stdio.h>
int main()
{
int i = 1;
for (i = 1; i < 4; i++)
{
int a = 2;
printf("%d\n", a);
}
return 0;
}
#include <stdio.h>
int n = 1000;
int main()
{
int n = 10;
printf("%d\n" n);//打印的结果是多少呢?
return 0;//10
}
变量的创建
1. 变量类型+变量名(字母, 数字,下划线)(+变量初始化)。
2. 字符和字符串的初始化都用char。
int a=1;
char a="nihao";//字符和字符串的初始化都用char
操作符
算术操作符
- (+ - *)
- ( / ) :若两端都是整数,则执行整数除法;若要求计算出小数,则必有一端是小数。 (小数点后默认6位)(如果是整数除法,则只会返回整数部分,丢弃小数部分)
- (%):两端只能是整数,且符号与左端一致。
#include <stdio.h>
int main()
{
float x = 6 / 4;
int y = 6 / 4;
printf("%f\n", x); // 输出 1.000000
printf("%d\n", y); // 输出 1
return 0;
}
#include <stdio.h>
int main()
{
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
printf("%d\n",-11 % 5); // -1
return 0;
}
复合赋值操作符
a+=4 ------- a=a+4
a*=2 ------- a=a*2
单目操作符
1. (a++,a--),先使用再改变。
2. (++a,--a),先改变再使用。
#include <stdio.h>
int main()
{
int a = 5;
printf("%d\n", a++);
a = 5;
printf("%d\n", a--);
a = 5;
printf("%d\n", ++a);
a = 5;
printf("%d\n", --a);
return 0;
}
注释的使用
1. 编译时,注释会被替换成⼀个空格。
2. 在一整个代码块前面最好用注释说明其功能,方便日后理解。
手动注释
1. 在行首加上//(只能一行)。
2. 在首尾加上/* */(可以多行)。
//char a = "hello";
/*char b = "world";*/
自动注释
1. 用鼠标选择要操作的段落。
2. 注释:Ctrl+K+C。
3. 取消注释:Ctrl+K+U。
致谢
感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!