最近开始重新学习C语言,记录下学习过的知识和踩过的坑。分享给大家也是为了以后给自己复习用,以下内容都是自己的理解,有错误的地方还请大伙们指出。
一、程序的编译和执行
- 预处理:gcc -E hello.c -o hello.i
调用预处理器cpp,完成诸如宏展开、处理条件编译、删除注释等工作。一般生成.i文件。 - 编译:gcc -S hello.i -o hello.s
调用编译器cc1,把源程序翻译成对应于目标系统的汇编文件.s。 - 汇编:gcc -c hello.s -o hello.o
调用汇编器as,将汇编指令翻译成机器指令,生成可重定位目标文件。 - 链接:gcc hello.o -o hello
调用链接器ld,将生成的可重定位文件与相关库文件链接,生成可执行目标文件。
二、关于main函数的参数
main的函数头有两种标准分别是:
第一种:int main(int argc,char *argv[])
int argc为传入main函数的字符串个数,argv[]数组用来存储传入的字符串。
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
for (i = 0; i < argc;i++)
{
printf("%s\n", argv[i]);
}
return 0;
}
第二种 int main(void)
这种函数不向main函数传递任何参数。
三、数据的基本类型及数据(整型、浮点型、字符型)在内存中存储的形式
-
c语言变量命名规则
在定义变量时,变量名可以是字母、数字和下划线的组合。(但要注意一下几点)
1、变量名的开头不能是数字,可以由字母或下划线开头。
2、不可以包含空格、标点符号和类型说明符
3、字母区分大小写
4、不可以是关键字
5、不能超过有效字符(255个) -
整型(64位编辑器)(数据类型所占字节数要根据编辑器的位数决定)
unsigned int、int: 占4个字节
short : 占2个字节
unsigned long、long、long long: 占8个字节 -
字符型
char:1个字节 -
浮点型
float: 4个字节
double :8个字节
数据在内存中存储的形式为补码。
例如:
#include <stdio.h>
int main(void)
{
int x = 5, y = -5;
printf("%#x\n", x);
printf("%#x\n", y);
return 0;
}
结果为:
分别为x=5与x=-5的补码
- 数据的原码、反码、补码(用十六进制表示时)
原码 : 数据的十六进制码。
反码 : 符号位不变,其他位按位取反。
补码 :反码的基础上加1。 - 小端存储模式
目前绝大部分计算机采用的是小端存储模式,即数据的高字节保存在内存的高地址中,数据的低字节保存在内存的低地址中。
例:一个数据:int d=0x87654321
比如一段内存:1000,1001,1002,1003。那么存储的形式为:
1000<------>21
1001<------>43
1002<------>65
1003<------>87
四、字符串和格式化IO
- 字符串
字符串就是一个或多个字符的序列。
例:“helloworld”
在内存中存储的形式类型于定义一个数组将每个字符分别存入数组。
字符串和字符的区别
例:字符常量’x’和字符串常量"x"是完全不同的。首先前者为基本类型,后者为派生类型。
其次"x"其实
是由两个字符组成,分别为’x’、’\0’。 - 格式化IOprintf()和scanf()函数用于使你能够和程序通信。它们被称为输入输出函数,简称IO函数。
printf()函数和scanf()虽然用途不同,但它们的工作几乎相同,都是用了格式控制串和参数列表。
使用printf打印变量的指令取决于变量的类型,例如打印整数时用%d,打印字符时用%c等,这些符号被称为转换说明(conversion specification),是它们指定了改如何把数据转换成可现实的形式。
转换说明中的转换类型
附上scanf()函数的说明(一位优秀博主的原创)
https://blog.youkuaiyun.com/hou09tian/article/details/88311149?
- 以上内容都是自己的理解,如有错误,还望指出