目录
关键字:
编译和链接:
字符数组:
转义字符:
负数取模:
输入输出函数:
关键字是C语言保留的,具有特殊含义和用途的标识符,也叫作保留字。
具体详见下面博主链接:
C语言关键字详解-CSDN博客
需要注意的一点是:
define不是C语言的关键字。因为#define 这一段代码是由预处理器来处理的,而不是由编译器来直接解析的,故而不算C语言语法的一部分。同理include 也不是C语言的关键字。
#define NUM 3
#include
int main()
{
return 0;
}
一段C语言代码变成可执行程序,需要通过以下四步:
1.预处理器预处理(#define宏替换,#include文件包含,#ifdef,#if ,#endif条件编译等)
2.编译器编译生成汇编代码
3.汇编器将汇编代码转换成目标文件
4.链接器链接生成可执行程序(将刚刚生成的目标文件和库文件合并成一个可执行程序)
# 1. 预处理(生成 .i 文件)
gcc -E main.c -o main.i
# 2. 编译(生成 .s 汇编代码)
gcc -S main.i -o main.s
# 3. 汇编(生成 .o 目标文件)
gcc -c main.s -o main.o
# 4. 链接(生成可执行文件)
gcc main.o -o main
下面这段代码中,strlen的值会是一个随机值,因为strlen这个函数的执行逻辑是遇到'\0'字符停止,
而这种形式定义的字符数组不包含‘\0’,故而无法确定什么时候遇到\0。从而输出一个不确定的值。
int main()
{
char ch[] = {'a','b','c'};
printf("%d\n", strlen(ch));
return 0;
}
想要正确使用strlen这个字符串函数。
就必须以字符串的形式来定义字符数组,这样数组的末尾会自动加上斜杆0。
int main()
{
char ch[] = "abc";
printf("%d \n",strlen(ch));
return 0;
}
‘\ddd'中的ddd表示的是八进制数字,如‘\060’表示十进制的48,对应ASCII码值表示的就是字符‘Q’
‘\xhh’中的hh表示的是十六进制的数字,如‘\x41'表示的就是十进制的65,对应的ASCII码值表示的就是字符‘A’
详见下面博主的博客:
【C语言】转义字符(\a \b \t \v \f \r 等)_c语言转义字符-CSDN博客
int main()
{
int a = -9;
int b = 2;
printf("%d",a%b);
int c = 9;
int d = -2;
printf("%d",c%d);
return 0;
}
-9 除以 2 商等于 -4 余数是 -1.
9 除以 -2 商等于 -4 余数是 1。
-9 除以 -2 商等于4,余数是 -1.
总结一个规律,负数的取模运算的结果的正负号,由第一个,也就是被除数决定.
scanf()函数在处理字符类型的占位符时会读取空白字符。
printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个
如printf("%d",n);就有“%d”和n两个参数.
printf()
允许限定占位符的最小宽度。%5d
表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格也就是右对齐。如果超过5位,正常输出。%-5d就表示左对齐。