目录
前言
这里是个人学习C语言基础部分的一些笔记或是个人一些学C的认识理解,小白上路各位大牛、老铁们随意指正批评亦或是给一些意见!
PS:C语言关键字讲解链接是和本系列相互联系的,内容方面相互补充,大家可以一起观看。
本系列中册:http://t.csdn.cn/bKBne
本系列下册:http://t.csdn.cn/ICP0j
本篇源代码集合:C_NS: 小牛马学C (gitee.com)
C语言关键字讲解链接:http://t.csdn.cn/w1HxF
第一个C语言程序
相信大多数小白新手都是和我一样从“Hello World!”开始的,我也一样,现在我们来了解一下这个“Hello World!”
#include <stdio.h>
int main()
{
printf("hello world");
return 0;
}
这里 int 是整型的意思 后面的 return 0 就是main函数执行完了之后返回 0 这里正好和 int 相呼应。
main是main函数的意思 注意:C语言程序是从main函数开始的,main函数有且只有一个(在整个工程文件里面也只能一有一个),要不然VS编译器就会出现下面的错误。
- 在同一个源文件里
- 在同一个工程里面
有时候各位也会看到这样的main函数格式,这几种格式都是正确的且运行之后的效果都差不多,希望各位老铁看到不会懵逼。(友情提示:各位老铁敲代码的时候看清楚,不要把main函数写成了mian)。
//不推荐使用
void main()
{
printf("Hello World!");
}
int main(void)//void表示main函数不接受参数
{
printf("Hello World!");
return 0;
}
int main(int argc,char* argv[])//指定main函数的参数
{
printf("Hello World!");
return 0;
}
printf:库函数(库函数是C语言本身给的函数,一般需要引用头文件,例如:printf需要引用<stdio.h>)
作用:打印括号中的内容。
有些老铁也会看到下面这种形式
#include <stdio.h>
int main()
{
printf("%d",10);
return 0;
}
解释:printf按照"%d"(以十进制的方式打印)的形式打印,下面是打印结果
下面是一些常见的打印格式,这里我就不一一放截图了,各位老铁自行体会吧。
%d | 以十进制的方式打印 |
%c | 以字符的方式打印 |
%s | 以字符串的方式打印 |
%f | 单精度浮点数打印-小数 |
%lf | 双精度浮点数打印-小数 |
%p | 以地址的形式打印 |
数据类型
C语言是一门高级的计算机语言。人和人说话需要有相同的语言才能够交流与理解,我们和计算机说话也需要相同的语言,C语言就是其共同语言,可是人们所描绘的东西是丰富多彩的,数据类型也就应运而生了。
基本的数据类型大致分为:
- 整型
- 实型 (浮点数)
- 字符型
类型 | 大小(字节) | |
char | 字符数据类型 | 1字节 |
short | 短整型 | 2字节 |
int | 整型 | 4字节 |
long | 长整型 | 4字节 |
long long | 更长整型 | 8字节 |
float | 单精度浮点数 | 4个字节 |
double | 双精度浮点数 | 8个字节 |
PS:1 bit = 8 字节(byte) 1 KB = 1024 字节 1 MB = 1024KB 1GB=1024MB 1TB= 1024 GB
这也是为什么你去买电脑硬盘总会少一点内存 硬盘厂商生产 硬盘1TB是1000GB,实则是1TB=1024GB
说道这里再给大家介绍一个操作符——sizeof
作用:以字节形式给出了其操作数的存储大小,单位是字节(byte)。
PS:\n是转义字符 其作用就是换行 其余的后面讲。
常量、变量
在生活正我们有很多值是不变的。例如:生日,身份证,性别,名字……像这样不会变的东西我们称之为常量。
也有的东西是有变化的。例如:年龄、时间、体重、身高……像这样会变得的值成为变量。
变量的定义
int age = 10;
int time = 13;
float weight=142.5;
char c = 'C';
变量名的起名规则(标识符)
- 只能由下划线(_)、数字、字母组成。
- 开头的必须是下划线和字母。
- 不能用关键字当变量名 例如:char 、int、if……
变量的分类
- 局部变量
- 全局变量
这里在main函数上面的a就是全局变量,而b就是局部变量。
后面我们又重新给a赋值,其后面输出又成了11,所以我们可以的出结论:当局部变量和全局变量同时存在的时候局部变量优先。
变量的作用域和生命周期
作用域 :是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
我们在CSDN_头文件里面创建了变量a并且给a赋值为10,而在CSDN_14里面成功打印出来。
b在{}里面定义且赋值为10,当出了{}之后b就不能用了。
由此我们可以得出结论:
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
PS: extern是C语言中的一个关键字,一般用在变量名前或函数名前,作用是用来说明“此变量/函数是在别处定义的,要在此处引用”想知道更多就去这个==》extern的使用详解(多文件编程)——C语言 - Luv3 - 博客园 (cnblogs.com)
生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
生命周期没有很好的例子展示,就没展示了,其效果跟作用域的效果类似。但是千万别认为是一个概念,作用域是一个范围概念,生命周期是时间的概念。
常量
常量分为以下几种:
- 字面常量 例如:10、20 字面上的
- const 修饰的常变量
int main()
{//a 本质是还是变量,就套了马甲const。const int n =10;//n是变量,但是又有常属性,所以我们说n是常变量
const int a = 3;//const常量 修饰常变量 a为变量 定义为a=3 const就固定 a=3
printf("%d\n",a);//常属性 const只在语法层面上进行了限制 变量不能直接被改变。
a = 6;
printf("%d\n", a);
return 0;
} // const直接定义变量a的值为3,后面对其定义不会改变,后面形如 a=6就会报错。
int main()
{//在使用常量的地方如:n 是不能用的 但是能作为一个固定的值
const int n = 10;//n是变量,但是又有常属性,所以我们说n是常变量
int arr[n] = { 0 };
printf("%d\n", arr);
return 0;
}
- #define 定义的标识符常量
//#define 定义的标识符常量
#define MAX 10
int main()
{
int arr[MAX]= {0};//这里没有报错 arr[]的方括号里面要填常量
printf("%d\n", MAX);//打印结果:10
return 0;
}
- 枚举常量
enum sex
{
MALE,//0
FEMALE,//1
SECRET //2 放在{}一一例举
};
int main()
{//(male female secret) s(标识符)是可以改的(通过枚举常数创造出来的变量)
//enum sex s = MALE;//是有数值
printf("%d\n", MALE);//0
printf("%d\n", SECRET);//1
printf("%d\n", FEMALE);//2
return 0;
}
PS:本人对枚举的理解不深 只能给出枚举的代码演示,各位老铁如果对其有深入的认识可以交流交流。
字符串
“Hello World!”;
这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
通过对代码的调试我们可以看到字符串后面有个\0结尾,\0是转义字符,是字符串的结束标志。
PS:char arr[]是数组,具体是什么东西后面会来聊的。
转义字符
上面有些代码会出现 \n、\0相信有些初学的老铁也会好奇是什么,这里就给各位说一说。
转义字符:顾名思义,转变意思的字符。就是在一些地方输入字符就会出现不一样的效果。
我们发现上面的代码并没有按照原来的内容进行打印,就是因为字符串里面出现了 \c、\t。
下面是整理的常见的转义字符
strlen函数
说到这里就给大家顺便说一下strlen函数
strlen函数跟printf函数一样也是库函数,其头文件是#include <string.h>
作用:求字符串长度的函数,遇到\0就停止。
这里是这么对应而来的,转义字符算一个长度。
ASCII码值
在C语言里面字符是按照ASCII码储存到内存里面的 下面是ASCII码表
PS:不需要全部记忆 只需要记住常用的 例如 \0、大小写英文字母、0-9的数字
记忆技巧:我们从表中可以看到0-9是按照顺序来的就需要记住48然后往后推就行。
字母:大写字母A是65然后往后推,大写和小写的距离是32,就是从65+32就能得到小写。
C语言语句
C语言的语句分为:
- 顺序语句
按照从上往下的顺序来执行代码
- 选择语句
- if语句
2.switch语句
例如:进入一个路口,我往右走,左边的东西跟我没关系。
- 循环语句
- while循环
- do……while循环
- for循环
当一直往杯子里面倒水,那个杯子里面的水不断增长,当积累到一定程度,水就会满,这个时候我们就需要往另一个杯子倒水。
函数
函数就是一劳永逸,就是写了这个函数,当后面使用的时候只需要调用、定义一下就行。
函数分为:
- 库函数 例如:printf、strlen 需要引头文件
- 自定义函数 自己创建的函数
int Add(int a, int b);
int Add(int a, int b)
{
return a + b;
}
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d", &a, &b);
c = Add(a, b);
printf("%d", c);
return 0;
}
这个上面的Add就是函数。
scanf是输入函数(相对应的是printf输出函数),就是按照“ ”里面的格式 输入a 和 b。要注意&不要忘记(&是取地址符)。
c = Add(a, b); 是函数调用,a和b是形参。
int Add(int a, int b); 是函数的声明
int Add(int a, int b) 是函数的定义
{
return a + b;
}
PS:函数的使用要声明后定义, 这段代码把函数的定义部分放在了main函数之上,函数声明部分其实可以删掉 因为函数的定义是特殊的函数声明,但是如果把函数的定义放在main函数的下面,函数的声明就要加上。
结尾
感谢各位老铁、大牛看到最后。如果有描述不正确的地方,欢迎随意指正,如果有要交流的东西,也欢迎,希望这篇文章对各位有所帮助,篇幅有限,咱们下篇再见!!!
未完!
待续……