1.文件
文件是一个外存的概念,文件只存在于“外存”(硬盘,∪盘,网盘)中,文件由两部分构成:文件名和文件主体。
文件的分类(分类形式多种多样,在此我们只关注一种分类)分为:可执行文件;不可执行文件。
可执行文件:在 windows操作系统中,扩展名为:*.exe,*bat,'com等的文件是可执行文件;可执行文件由指令和数据构成。 Linux是靠文件属性来判断判断是否可执行。
不可执行文件:其内容是由数据构成。举例:在C/C++语言中:c/*cpp源文件(文本),*h头文件(文本),*预编译文件(文本),*.s汇编文件,*.o/*obj二进制目标文件,*,exe可执行文件
C语言的编译连接过程:
![](https://img-blog.csdnimg.cn/img_convert/9e7aa992aa546010e7cd9993345df912.png)
2.什么是C语言
C语言是一种结构化语言,它有着清晰的层次,可按照模块(函数)的方式对程序进行编写,十分有利于程序的调试,且C语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对內存直接寻址以及对硬件迸行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。(了解内容:1982年成立C标准委员会,建立C语言的标准。1989年,ANS发布了第一个完整的C语言标准——ANSIX3.159—1989,简称"c89″。1999年,在做了一些必要的修正和完善后,SO( International StandardsOrganization),发布了新的C语言标准,命名为lSO/EC9899:1999,简称“c99″。在2011年12月8日,SO又正式发布了新的标准,称为SO/lEC9899:2011,简称为“C11″。目前,最新的C语言标准为2017年发布的“C17”。)
2.1C语言程序结构特点
1.C语言源程序可以由一个或多个源文件组成
2.每个源文件可由一个或多个函数组成
3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数
4源程序中可以有预处理命令( include命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面
5每一个说明,每一个语句都必须以分号结尾
6标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔
3.数据类型
字符类型:char(1)
整形基本类型:short(2)int(4)long int(4)long long*(8)
浮点型基本类型:float(4) double(8) long double(8)
bool类型:bool (值:true 1;false 0)
无类型:void(一般不用于变量,用于无返回值的函数)
#include<stdio.h>
//sizeof计算数据类型或者变量所占字节个数;
int main()
{
printf("char size %d\n", sizeof(char));//1
printf("char size %d\n", sizeof(short));//2
printf("char size %d\n", sizeof(int));//4
printf("char size %d\n", sizeof(long int));//4
printf("char size %d\n", sizeof(long long));//8
printf("char size %d\n", sizeof(float));//4
printf("char size %d\n", sizeof(double));//8
printf("char size %d\n", sizeof(long double));//8
printf("char size %d\n", sizeof(bool));//1
return 0;
}
运行结果:(不同编译器,数据类型大小可能不同)
![](https://img-blog.csdnimg.cn/img_convert/74b67ba94728fcea6c6ca5919a4a62a9.png)
4.标识符、变量和常量
变量与常量的区别在于:其值是否能够改变。变量能改变,常量不能。
什么是声明,什么是定义?
什么是定义:所谓的定义就是为这个変量分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名。但注意,这个名字一旦和这块内存匹配起来,它们就同生共死,终生不离不弃,并且这块内存的位置也不能被改变。一个变量在一定的区域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义同个变量或对象。
什么是声明:有两重含义,如下 第一重含义:告诉编译器,这个名字已经匹配到一块内存上了 第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量名。
声明与定义的主要区别:定义创建对象并为其分配内存;而声明并不分配内存。
4.1标识符
给变量、常量、函数等起的名字。要求:
由数字,字母、和下划线“_”组成,且首字符只能是字母或者下划线。
不能是关键字。
区分大小写。
*应做到“见名知意”
*长度一般限制为8字符。(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长)。
4.1变量
按照作用范围分为:
全局变量:从定义起往下皆为有效
局部变量:在该函数中有效
块变量:在该“{}”中有用
由于变量的作用于不同,所以可能存在某些重定义:(变量遵循向上就近原则)
#include<stdio.h>
int a = 10;//全局变量
int b = 20;
int main()
{
printf("a=%d b=%d\n", a,b);
int a = 20;//局部变量
printf("a=%d b=%d\n", a, b);
{
int a = 30;//块变量
printf("a=%d b=%d\n", a, b);
}
return 0;
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/3e6b1c76a41f5a12d55f00b60afb984c.png)
4.2常量
C语言常量有:
1.字面常量:为基本数据类型赋值的结果值被称之为字面常量,例如,int a = 10;这个10被称之为字面常量
2.用# define定义的宏常量:定义的标识符不占内存,在预编译时进行宏替换,之后便不存在。
3.用 const关键字修饰的变量,称为常变量
4.枚举常量
5.字符常量和字符串常量
4.2.1const修饰的常变量
常变量特点:只可读不可写(只能读值,不能修改值),因此常变量必须在定义时就进行赋值。
int const a=10;
const int b=10;
//以上两种const位置均可
4.2.1.1常变量在C与C++中区别。
1.在C中,常变量为全局变量是初始化为0,当为局部变量是必须初始化。
const int a;
int main() {
const int b=0;
printf("%d %d\n", a, b);
}
在C++,常变量无论定义为全局变量还是局部变量,均必须进行初始化。
const int a=0;
int main() {
const int b=0;
printf("%d %d\n", a, b);
}
2.在C中,常变量以变量为主,C++中以常量为主。
以下数组定义方法在C中无法编译通过,但在C++中可以编译通过:
int main() {
const int len = 10;
int arr[len] = { 1,2,3,4,5,6,7,8,9,0 };
return 0;
}
4.2.1.2常变量与宏定义区别
二者同为值替换,但替换时间不同,宏定义是在预编译时替换,而常变量则是在编译时替换。
宏定义不占用内存,对值的类型无要求;而常变量需要开辟内存空间,需要对值得类型进行检查。
#define LEN 10
const int len = 10;
int main() {
int arr[len] = { 1,2,3,4,5,6,7,8,9,0 };
int brr[LEN] = { 1,2,3,4,5,6,7,8,9,0 };
return 0;
}
4.2.2枚举常量(枚举成员)
枚举常量赋值规则:
枚举常量的值必须为整形;
当第一个枚举常量未赋值时默认值为0;当后面枚举常量未赋值时,其值默认为前一个值+1。
例如:
enum week
{
A,//值默认为0;
Mon=1,
Tues=2,
Wed=3,
Thur,//Thur的值为Wed+1,=4;
Fri=5,
Sat=6,
Sun=7
};
枚举常量的使用:
enum week
{
Mon=1,
Tues=2,
Wed=3,
Thur=4,
Fri=5,
Sat=6,
Sun=7
};
int main()
{
week wx = Mon;
printf("%d \n", wx);//运行结果为1;
}
4.2.3字符常量与字符串常量
单引号 和双引号都是定界符,单引号是字符定界符,双引号是字符串定界符。
字符串常量与字符常量区别:
![](https://img-blog.csdnimg.cn/img_convert/c4008f459758e04b40b800a9bf098a40.png)
ASCII码表:一些特殊值需要记住:
空字符(NULL 、\0) 0;换行 10;回车:13;空格 32;数字0 48;大写A 65;小写a 97
![](https://img-blog.csdnimg.cn/img_convert/d0b8b517aec8152d85b59e7b0659493d.png)
'\0'是字符串结束的标志,占用内存空间但不占用字符串长度。
#include<stdio.h>
#include<string.h>
int main()
{
char str[] = { "hello\0\0world\0" };
int len = strlen(str);//5 '\0'不占用字符串长度
int size = sizeof(str);//13+1 '\0'占用内存;且系统默认为补充'\0'
printf("%s\nlen:%d\nsize:%d\n",str, len, size);
return 0;
}
转义字符
![](https://img-blog.csdnimg.cn/img_convert/1a395e46094060c9c365caa913f1b623.png)