C语言学习笔记(一)
GitHub是什么
QQ空间和GitHub
QQ空间和GitHub。例如:
TYPE | 仓库 | 内容 | 权限 |
---|---|---|---|
QQ空间 | QQ空间相册 | 照片 | 对所有公开/仅自己可见 |
GitHub | 代码仓库 | 代码 | Public / Private |
1.首先创建自己的GitHub账号,创建代码仓库,例如:C语言代码(C_Code)
2.使用GitHub Desktop桌面可视化工具或者使用命令行进行代码管理,具体怎么弄就不详细的说了,感兴趣的自己去了解了解吧。反正不动手可能永远都学不会!手动滑稽!
(一)重走取经路(C语言重新入门)
1.1 为什么说重走取经路
因为“C语言虐我千百遍,我待C语言如初恋!”
1.2 干就对了!
关于C语言的发展等内容自己去网上找找文档看看,别的就不扯了。
直接就是:干!只有撸代码才能更快成长!
我使用的环境是:Win10 + 64位 + Visual Stdio 2015
第一个C语言程序:
#include<stdio.h> //头文件 std: stanard(标准) i:input(输入) o:output(输出)
int main() //主函数(整个项目中有且只有一个main()主函数,这个函数是整个项目(程序)的入口!)
{
printf("Hello world!\n"); // printf(); 这是一个函数,用来在屏幕上输出 Hello world!紧跟着后面 \n 是换行(光标跳到下一行,Hello world 独占一行!); 要想使用printf();就要包含stdio.h头文件
return 0; // 这句表示函数有返回值,返回值为:0,并结束;
}
//void main() {}; 这种写法是可以的,但是已经过时了,仅仅跟着主流,别自己瞎搞。
//main前面的Int表示main函数调用返回一个整型值,所有 return 0;中的这个0就是整型 0。
1.3数据类型
type(类型) | 名称 | 长度 |
---|---|---|
char | 字符串数据类型 | 1字节(byte) |
short | 短整型 | 2字节(byte) |
int | 整型 | 4字节(byte) |
float | 单精度浮点型 | 4字节(byte) |
double | 双精度浮点型 | 8字节(byte) |
long | 长整型 | 4字节(byte) |
long long | 更长整型 | 8字节(byte) |
注意:C语言没有字符串类型
如何获取书类型长度:
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char)); // 1
printf("%d\n", sizeof(short)); // 2
printf("%d\n", sizeof(int)); // 4
printf("%d\n", sizeof(float)); // 4
printf("%d\n", sizeof(double)); // 8
printf("%d\n", sizeof(long)); // 4
printf("%d\n", sizeof(long long)); // 8
//getchar();
return 0;
}
使用sizeof(类型) 得到的有1、2、4、8,这是?
答:这是数据类型占用的内存空间,1字节、2字节、4字节、8字节
C语言标准规定:sizeof(long) >= sizeof(int) 就是正确的,在不同的平台中有不同区别;
1.3.1数据类型的单位
1.3.2各个类型基本认识
变量:临时存储数据的空间;空间内存储的数据会随着需要随时变化。
常量:常量也是存储数据的空间,只不过程序运行起来,常量就不能被改变。大白话就是:固定不变的量。
类型转换说明符:
type(类型) | 符号描述 |
---|---|
%d | 打印整型 |
%c | 打印字符型 |
%s | 打印字符串类型 |
%lf | 打印浮点型----小数 |
%p | 以地址形式打印 |
%x | 以十六进制形式打印 |
%o | 以八进制形式打印 |
#include <stdio.h>
int main()
{
char ch = 'a';
printf("ch = %c\n", ch); // %c 是类型转换说明符号,就是将ch这个变量以字符的形式展示出来。ch这个变量存储的数据是:a
int age = 18;
printf("age = %d\n", age); // 与上面的字符类型的解释是一样的, %d是将age这个变量以整型的形式展示出来,age这个变量存储的数据是:18
//...
//剩下的形式自己去搞一搞吧,五姑娘不能懒啊,要动起来。(^.^)
return 0;
}
1.4 变量和常量
生活中有些值是变化的量(年龄,体重,薪资等)这就是变量。
生活中有些值是不变的量(圆周率,一天24小时,身份证号码等)这是常量。
1.4.1 变量的分类
(1) 局部变量
(2) 全局变量
#include <stdio.h>
int age = 30; //全局变量,定义在{}(代码块)- 外部 - 的变量称为全局变量
int main()
{
int age = 20; //局部变量,定义在{}(代码块)- 内部 - 的变量称为全局变量
printf("age = %d\n", age); // 20
return 0;
}
问1:可以注意到:这两个变量的便令名称是一样。那么这两个变量名能不能一样呢?
答案是可以一样!
问2:为什么能够一样?
答:原因是这两个变量的作用域不一样的。
建议:全局变量和局部变量的变量名称不要一样,容易造成误会,产生Bug!
注意:当全局变量和局部变量的变量名称一样的时候,局部变量优先!,这也说明的为什么上面的代码输出了 “age = 20”
作用域练习:
#include <stdio.h>
int main()
{
{
int age = 20;
}
printf("age = %d\n", age); // error 报错:age在{}内部是局部变量,不能再{}外部使用,所以报错!
return 0;
}
1.4.2 变量的作用域和生命周期
作用域:(scope):程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的。
而限定这个名字的可用性的代码范围就是这个名字的作用域。
1:局部变量的作用域十变量所在的局部范围。
2:全局变量的作用是整个项目(工程)。
这也就解释了上面的代码会报错了!
生命周期:变量的生命周期指的是变量的创建到变量销毁的一个时间段。
1:局部变量的生命周期:进入作用域,生命周期开始,出去作用域生命周期结束。
2:全局变量的生命周期:和整个程序的生命的周期一致。程序结束,全局变量的生命周期结束。
1.4.3 常量
C语言中的常量和变量的定义的形式有所差异:
C语言的常亮分为以下几种:
(1)字面量常量
(2)const 修饰的常变量
(3)#define 定义的标识符常量
(4)枚举常量
(1)字面常量:
‘a’:字符字面常量
3; 整形字面常量
3.14; 浮点类型字面常量
直接书写出来的值,就是字面常量。
#include <stdio.h>
int main()
{
3; //整形字面量常量
'a'; //字符型字面量常量
3.14; //浮点型字面量常量
return 0;
}
(2)const - 常属性
const修饰的常变量
const char ch = ‘a’; //这是字符型的常变量。
const int age = 29; //这是整形的常变量。
虽然const修饰的变量有了常属性,值是不能再修改了,但是本质上依然是个变量。
#include <stdio.h>
int main()
{
const int n = 20;
//int char[n] = {0}; //这是错误的
n = 30; //这是错误的
return 0;
}
(3)#define 定义的标识符常量
#include <stdio.h>
#define MAX 20;
int main()
{
int char[MAX] = {0}; //正确 此时MAX是常量
printf("%d\n", MAX); // 20
return 0;
}
(4)枚举常量
生活中总是有些值是可以被列举出来的
例如:性别、周一到周日,一月到十二月等
#include <stdio.h>
enum WeekDay
{
Monday, //星期一
Tuesday, //星期二
Wednesday,//星期三
Thursday, //星期四
Friday, //星期五
Saturday, //星期六
Sunday //星期日
};
enum Sex
{
MALE, //男
FEMALE,//女
SECRET //保密
};
int main()
{
//定义枚举类型的变量
enum WeekDay w = Monday;
//打印枚举常量
printf("%d\n", MALE); // 0
printf("%d\n", FEMALE); // 1
printf("%d\n", SECRET); // 2
//为什么是0、1、2?
//因为只要没有特意的给枚举类型指定值,枚举类型默从 0 开始。
return 0;
}
#include <stdio.h>
int main()
{
//定义枚举类型的变量
enum WeekDay w = Monday;
w = Tuesday; //这是可以修改的,应为你修改的是由枚举类型创建出来的变量。
//Tuesday = 5; //这是错误的,不能修改!!!
return 0;
}