这次我们接着上一篇博客,我们接着来继续C语言的学习
变量的作用域和生命周期
变量的作用域:
简单的说就是变量的作用范围,比如我们创建了一个全局变量,作用域就是整个程序
局部变量就是在某块地方或者某个函数内使用
下面我要代码简单的讲解一下
#include <stdio.h> int b = 10; int main() { { int a = 20; printf("%d\n", b);//(1) } printf("%d\n", a);//(2) printf("%d\n", b);//(3) return 0; }
变量b是全局变量,a为局部变量 ,其中(1)和(3)都能打印出来,但是(2)却不能,因为a超出了自己的作用范围,
变量的生命周期:
变量的生命周期就是指,从变量诞生到变量销毁的时间段(可以理解为人的出生到死亡的时间)
局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束的时间段。
全局变量的生命周期是:整个程序的生命周期(全局变量的创建到整个程序的结束的时间段)。
这两者可以说是有关系但是这个关系又很微妙,当我们学习C语言更进一步会慢慢的理解
常量
分为四种
字面常量
45;
const修饰的常变量
代码一;
#include <stdio.h> int main() { int a = 10; printf("%d\n", a); a = 20; printf("%d\n", a); const int c = 20; printf("%d", c); c = 30;//这一个变量无法更改 return 0; }
代码二:
1. int main() 2. { 3. const int a = 10; 4. int arr[a] = { 1,2,3,4,5 }; 5. return 0; 6. }
上面小可爱可以去运行看看,都会报错足以看出常变量还是变量
常变量:是具有常属性的变量,一个变量被const修饰就会变成常变量,具有常量的属性但本质上还剩变量
#define定义的标识符常量
#define M 100 int main() { printf("%d", M); return 0; }
#define M 100 int main() { int arr[M] = { 1,2,3,4,5 }; return 0; }
可以看出是常量
枚举常量
枚举:一一列举出来
比如RGB的三颜色 红 绿 蓝
代码:
#include <stdio.h> enum Color { REN, GREEN, BLUE }; int main() { enum Color c = REN; printf("%d\n", c); enum Color a = GREEN; printf("%d\n", a); enum Color b = BLUE; printf("%d\n", b); return 0; }
#include <stdio.h> enum Color { //枚举常量 REN=6, GREEN=3, BLUE=9 }; int main() { enum Color c = REN; printf("%d\n", c); enum Color a = GREEN; printf("%d\n", a); enum Color b = BLUE; printf("%d\n", b); return 0; }
上面一个是默认值,一个是可以赋值
所以枚举常量值可以改变
字符串+转义字符+注释
字符串
"hello"
由双引号( Double Quote )引起来的一串字符称为字符串字面值( String Literal ),或者简称字符串。
字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容
下面我来演示
#include <stdio.h> int main() { //字符串是可以存放在字符数组中的 char arr[] = "bit";//我们放入数组的个数为4,其中的\0我们是看不见的 char arr1[] = { 'b','i','t' };//我们放入数组的个数为3个 printf("%s\n", arr); printf("%s\n", arr1);//要遇见\0才停止打印,因为\0为字符串的结束标记, return 0; }
结果:
可以看出字符串的打印停止是要遇见'\0',注意arr我们放入的元素为bit\0,arr1放入的是bit不要混淆了
或者我们打印一下字符串的长度
代码如下:
#include <string.h> #include <stdio.h> int main() { //字符串是可以存放在字符数组中的 char arr[] = "bit";//我们放入数组的个数为4,其中的\0我们是看不见的 char arr1[] = { 'b','i','t' };//我们放入数组的个数为3个 printf("%s\n", arr); printf("%s\n", arr1);//要遇见\0才停止打印,因为\0为字符串的结束标记, printf("arr的长度为:%d\n",strlen(arr)); printf("arr1的长度为:%d\n",strlen(arr1)); return 0; }
结果:
看看是不是就可以理解'\0'是字符串的结束标记
strlen() 计算字符串的长度,但是是计算'\0'前面的字符,'\0'不计算进去,但是'\0'也是字符,如果字符串的真正长度就是strlen()+1,--------要引入头文件
而前面的sizeof()计算的是空间大小,是计算所有的,就拿上面的来说,只计算数组里面所有元素的总空间大小