4.4*变量的使用(上期继续补充):
字符类型: %c - 字符类型
%d - 整型
%s - 字符串
%f - float类型
%lf - double类型
%p - 地址的打印
#define _CRT_SECURE_NO_WARNINGS //scanf //printf //库函数 - C语言的编译器提供的现成的函数,直接可以使用(使用的时候要包含头文件stdio.h) //scanf的作用 - 输入数据,数据从键盘读到内存中 //printf的作用 - 输出数据,数据从内存打印(输出)到屏幕上 #include <stdio.h> int main() { int a = 0; //scanf("%d", &a); //scanf("输入的格式", 地址); //地址:表示数据存放在哪里,这里&a是取地址a -- 取出a的地址 //printf("%d", a); //结果: 输入--w 输出--0 //原因:输入字符和字符类型不匹配,得把格式匹配上 //读个字符: char ch = 0;//字符类型里也是可以放个0的 scanf("%c", &ch); printf("%c", ch); return 0; }
4.5*变量的作用域和生命周期:
作用域:
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。(在哪里可以使用)
1.局部变量的作用域是变量所在的局部范围
2.全局变量的作用域是整个工程(整个项目都能用,不安全)
局部变量
#include <stdio.h> int main() { { int a = 100;//局部变量a:作用域为a所在的{}内 //printf("%d\n", a);//结果:打印100 } printf("%d\n", a);//结果:系统报错 -“系统找不到指定文件”; VS报错 -"未定义标识符'a'" return 0; }
全局变量:
#include <stdio.h> int a = 2023;//全局变量:语法允许的情况下,任何情况下都可以使用 //在大括号外定义的变量:全局变量 //在大括号内定义的变量:局部变量 void test()//void: 不用返回数据 { printf("2---> %d\n", a); } int main() { printf("1---> %d\n", a); test();//调用上面写的函数 return 0;//结果1:打印“1---> 2023”,可以调用主函数外的a //结果2:1---> 2023 //2---> 2023(调用方法后) } //使用add.c文件里的全局变量 extern int g_val;//(extern: 外部符号) int main() { printf("%d\n", g_val); return 0;//结果:2023,语法允许的情况下,全局变量任何情况下都可以使用 }
生命周期:
变量的生命周期是变量的创建到变量的销毁之间的一个时间段。(什么时候可以使用)
1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
2.全局变量的生命周期是:整个程序的生命周期
局部变量:
//生命周期(局部变量) #include <stdio.h> int main() { { int a = 3; int b = 5; int c = a + b; printf("%d\n", c); } return 0; }
全局变量:
//生命周期(全局变量) #include <stdio.h> int a = 0; int main() { // //。。。 //写了好多代码。。 //。。。 // return 0; }
4.6*常量:
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下几种:
*字面常量:(直观一看,就是给常量值)
3
3.14
‘a’ - 字符
"abcdef" - 字符串
*const修饰的常变量:
#include <stdio.h> int main() { const int a = 3; //const: 赋予变量常属性 //常属性:不能修改的属性 //这里的a是具有常属性的,不能改变,但是本质上还是变量 printf("%d\n", a); a = 10;//赋予a常属性后再修改a会报错 printf("%d\n", a); //数组 const int n = 10; //int arr[n]; int arr[n]; //报错:创建数组时[]中需要填常量,这里使用被const修饰的n填入,还是报错 //说明n本质还是变量,只是不能修改而已(常变量) return 0; }
*#define定义的标识符常量:
#include <stdio.h> #define SIZE 10//#define 定义标识符常量 int main() { int a = SIZE; int arr[SIZE]; return 0; }
*枚举常量:
#include <stdio.h> enum SEX//枚举关键字 { //列出了枚举类型enum SEX的可能取值 MALE, //男(常量间用逗号隔开) FEMALE //女 //枚举常量,要赋值(初始值)只能在这里面赋值,不赋值的话默认从0自增 }; int main() {C enum SEX s = FEMALE;//枚举的可能取值是给枚举类型赋值的 printf("%d\n", MALE); printf("%d\n", FEMALE); return 0; }
5*字符串+转义字符+注释:
5.1*字符串:
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
(注:字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算字符串内容)
#include <stdio.h> int main() { char ch[] = {'a', 'b', 'c', 'd', 'e', 'f'}; char ch2[] = "abcdef"; //在字符串的末尾隐藏一个\0,这个\0是字符串的结束标志 printf("%s\n", ch); printf("%s\n", ch2); return 0; }
(使用%s打印时,遇到\0才会停止打印)
#include <stdio.h> #include <string.h> int main() { char ch1[] = { 'a','b','c' };//[a][b][c] char ch2[] = "abc"; //[a][b][c][\0] int len1 = strlen(ch1); //strlen()方法:求字符串长度, //从给定的地址,向后数字符,直到遇到\0结束,\0不统计在内 printf("%d\n", len1); int len2 = strlen(ch2); printf("%d\n", len2); }
5.2*转义字符:
转义字符 --> 转变原来的意思。
转义字符 释义
\? 在书写连续多个问号时使用,防止它们被解析为三字母次
\' 用于表示字符常量'
\" 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd d d d表示1-3个八进制的数字,如:\130 表示 字符X
\xdd d d 表示2个十六进制数字,如:\x30 表示字符0