目录
C语言主要运用于底层,也可以运用于上层软件(早期还没有其他的语言的时候,很多游戏就是C语言做的)
随着物联网,万物互联,以及嵌入式开发和单片机开发,C语言是必然的趋势。
计算机语言的发展: 2进制 - 汇编语言 - B语言 - C语言
C语言的代码是从main函数的第一行开始执行的main函数是程序的入口 - 有且仅有一个main函数 - 可以在任意位置
局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束
2.const 修饰的常量:本质上是个变量,但是具有了常属性,不能被修改
注意:字符串的结束标志是一个 \0 的转义字符,不算做字符串的内容。例如:"abc" --> a b c \0
用双左斜杠 // 注释单行内容 (C++的注释风格) (推荐使用:支持嵌套)
用 /**/ 给多行注释(C语言的注释风格) (不推荐:不支持嵌套使用)



写一个c代码,在屏幕上打印 hello world
- #define _CRT_SECURE_NO_WARNINGS 1
-
- #include
- //主函数
- int main()
- {
- //printf 是一个库函数 - C语言的标准库中的一个现成的函数,直接就能使用
- //功能:在屏幕上打印信息
- //输出函数,打印函数,使用前一定要包含头文件 stdio.h
- //stdio.h 标准输入输出头文件
-
- printf("hello world\n");
-
- return 0;
- //}
主函数的其他写法
-
- //推荐
- //int main()
- //{
- //
- // return 0;
- //}
-
- //可以这样写
- //int main(void)
- //{
- //
- // return 0;
- //}
-
- //古老的写法 - 不建议
- //void main()
- //{
- //}

bit - 比特
byte - 字节 1byte = 8bit
KB 1KB=1024byte
MB 1MB=1024KB
GB 1GB=1024MB
TB 1TB=1024GB
PB 1PB=1024TB
- int main()
- {
- printf("%d\n", sizeof(char)); //1字节
- printf("%d\n", sizeof(short)); //2
- printf("%d\n", sizeof(int)); //4
- printf("%d\n", sizeof(long)); //4 //C语言标准:sizeof(long)>=sizeof(int)
- printf("%d\n", sizeof(long long)); //8
- printf("%d\n", sizeof(float)); //4
- printf("%d\n", sizeof(double)); //8
-
- return 0;
- }
- int main()
- {
- int num = 20; //向内存申请4个字节空间存储 20 这个整型数据
- char ch = 'b'; //向内存申请1个字节空间存储 b 这个字符数据
- return 0;
- }
用合适的类型,存储各种数据
内存利用率高,写代码更灵活
1.变量的命名
- 由字母(包括大写和小写),下划线(_),数字组成!
- 不能由数字开头!
- 变量名不能使用关键字!
- 长度不能超过63个字符
- 变量区分大小写
- 变量名尽量起的有意义
2.变量的分类
- 局部变量:在{}内部定义的变量就是局部变量
- 全局变量:在{}外部定义的变量就是局部变量
- int main()
- {
- int num = 10;//num是变量,创建变量时,最好给个初始值
- printf("%d\n", num); //10
- num = 20;
- printf("%d\n", num); //20
-
- return 0;
- }
全局变量和局部变量的名字可以相同,但是在使用时局部优先
局部变量里的名字不能相同
- int num = 100;//全局变量
- int a = 1000;
-
- int main()
- {
- int a = 10;//局部变量
- printf("%d\n", a);
-
- //int a = 20;//创建的局部变量不能重名!!
- //printf("%d\n", a);
- return 0;
- }
- 局部变量的作用域:是局部变量所在的局部范围
- 全局变量的作用域:整个工程 (缺点是不安全)
- void test()
- {
- printf("%d\n", a);//无法使用
- }
-
- int main()
- {
- int a = 10;
- printf("%d\n", a);
- {
- int b = 20;
- printf("%d\n", b);
- }
- //printf("%d\n", b); //b不在作用域里,无法使用printf打印出来
- return 0;
- }
-
- int a = 100;
-
- void test()
- {
- printf("2:%d\n", a);
- }
-
- int main()
- {
- printf("1:%d\n", a);
- test();
- return 0;
- }
-
- //声明外部符号(当使用此工程项目的另一个文件的变量时)
- extern int g_val; //另一个文件下的变量g_val
-
- int main()
- {
- printf("%d\n", g_val);
- return 0;
- }
-
- int main()
- {
- { //进入a的作用域,生命周期开始,再此作用域里a可以使用
- int a = 10;
- printf("%d\n", a);
- }//出a的作用域,生命周期结束
- //printf("%d\n", a); //a不在作用域里,无法使用printf打印出来
- return 0;
- }
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)有些值是可变的(比如:年龄,体重,薪资)
- 字面常量
- const 修饰的常量
- #define定义的标识常量
- 枚举常量
- //1.字面常量
- int main()
- {
- 100;//整型字面值
- 'w';//字符字面值
- 3.14;//浮点型的字面值
- "abcdef";//字符串常量
-
- return 0;
- }
- //2.const 修饰的常变量
- int main()
- {
- const 常属性:值不能被改变
- const int num = 10; //本质上是个变量,但是具有了常属性,不能被修改
- printf("%d\n", num);
- num = 20; //err;无法修改值
- printf("%d\n", num);
-
- return 0;
- }
- //数组
- //const int n = 10;
- //int arr[n] = { 0 }; //n虽然被const修饰,具有常属性,不能被改变,但是本质上还是变量,所以不能用来指定数组的大小
//C99中,引入了:变长数组的概念,变长数组的大小是可以使用变量来指定的,但是数据不能被初始化
//vs2013/vs2019是不支持C99的 ;Linux系统:gcc编译器 支持C99
int n = 10;
int arr[n] = { 0 };
- //3.#define定义的标识常量
-
- #define MAX 1000 //可以在全局定义
-
- int main()
- {
- printf("%d\n", MAX);
- //MAX = 2000; //无法修改常量MAX
-
- #define MIN 0 //可以在局部定义
- printf("%d\n", MIN);
-
- int arr[MAX]; //可以运用在数组
-
- return 0;
- }
性别:男,女,保密
三原色:RGB(红绿蓝)
血型:A B O AB RHB
- //4.枚举常量
- //枚举 - enum
-
-
- //声明的一个表示性别的枚举类型
- enum Sex
- {
- //下面三个符号是Sex这个枚举类型的未来的可能的值
- //枚举常量
- MALE=5, //默认为0,可以赋初值
- FEMALE, //1
- SECRET //2
- };
-
- int main()
- {
- enum Sex s = MALE;
- printf("%d\n", MALE);
- printf("%d\n", FEMALE);
- printf("%d\n", SECRET);
- return 0;
- }
- #include
- int main()
- {
- //char c1 = 'a';
- //char c2 = 'b';
-
- //数组
- //字符数组
- //char arr1[] = "abc"; //调试后发现:a b c \0 共四个字符
- //char arr2[] = { 'a', 'b', 'c' };//调试后发现:a b c 共3个字符
-
- //printf("%s\n", arr1);//打印 abc ,打印字符串,直到\0才终止打印
- //printf("%s\n", arr2);//打印 abc烫烫烫bc ,打印字符串,没有找到\0是不会停下来的
-
- char arr1[] = "abc"; //调试后发现:a b c \0 共四个字符
- char arr2[] = { 'a', 'b', 'c' };//调试后发现:a b c 共3个字符
-
- //strlen是一个库函数,专门打印字符串长度。在求字符串长度时,统计\0之前出现的字符的个数。
- int len = strlen(arr1); //a b c \0
- printf("%d\n", len); //3
-
- len = strlen(arr2);//a b c .....\0
- printf("%d\n", len); //15(随机值),因为abc之后不知道\0在哪,所以一直找,直到\0才终止,说明此时\0前的字符有15个
-
- return 0;
- }
-
- int main()
- {
- printf("abc\ndef");// \n - 换行
- //结果为:
- //abc
- //def
-
- printf("abc\0def");// \0 - 字符串结束标志
- //结果为:
- //abc
-
- return 0;
- }
- int main()
- {
- printf("%c\n", 'a');
- printf("%c\n", '\'');//想打印 ' 这个字符时,也需要转义\'
-
- printf("%s\n", "abc");
- printf("%s\n", "\"");//想打印 " 这个字符串时,也需要转义\"
-
- printf("%s\n", "abc\\ndef");//想打印 abc\ndef 这个字符串时,也需要转义\为\\
- printf("\a");//把声音调大一点,可以听到警告蜂鸣的声音
-
- printf("ab\bcdef");//acdef ,\b - 退格,把b删掉了
-
- printf("%c\n", '\130'); //ASCII码值为88的字符 - H
- 八进制 130 转换为十进制 1*8^2 + 3*8^1 + 0*8^0 =64+24+0 =88
-
- printf("%c\n", '\x63');//ASCII码值为99的字符 -c
- 十六进制 163 转换为十进制 6*16^1 + 3*16^0 =96+3 =99
-
- return 0;
- }
-
- //三字母词
- //??) ---> ]
- int main()
- {
- printf("(are you ok??)");
- //想要打印(are you ok??) 变成了(are you ok]
- //所以在连续的?时,转义\?\?
-
- return 0;
- }
思考
printf("%d\n", strlen("abcedf")); //6
printf("%d\n", strlen("c:\test\628\test.c"));//14
- int main()
- {
- /*
- int a = 10; //创建一个变量a ,赋初值为10
- */
-
- return 0;
- }