C语言笔记1:编译和链接、算术操作符、转义字符等。

目录

关键字:

编译和链接:

字符数组:

转义字符:

负数取模:

输入输出函数:


关键字:

关键字是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;
}

C语言笔记1:编译和链接、算术操作符、转义字符等。_第1张图片

-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就表示左对齐。

你可能感兴趣的:(笔记,学习,c语言,经验分享)