目录
前言
各位大佬好啊,今天也来分享一下学习笔记呀,前两天课和事情太多了就没啥时间写。ok,没用的话就到此为止吧。
全局变量和局部变量
局部变量
简单说一下局部变量。局部变量就是只能在局部区域使用的变量,要了解局部变量我们就要了解什么是局部区域。局部区域可以理解为一个大括号({ })就是一个局部范围。在局部范围内创建的变量,只能在这个局部范围内使用,出了局部范围就会自动销毁,括号外面是不能使用的。
在括号内创建的a变量,出了括号就被编译器定义为未定义的标识符a了。
全局变量
全局变量正好与局部变量属性相反,他能在整个工程的任意位置使用,在任意位置调用他都不会报错。
当全局变量定义在函数之后,需要在函数加上声明,但是我们没必要自己自找麻烦,使用还是定义在上面最好。
那么假如,我定义了一个相同名称的局部变量和全局变量,编译器会优先调用哪个变量呢?
由代码可见,当局部变量与全局变量变量名相同时,编译器会优先调用局部变量。
作用域和生命周期
既然说到了局部变量和全局变量,就不得不说变量的作用域和生命周期。
作用域
作用域就是指变量能够在哪些范围内使用,就是变量的作用域。
num1的作用域在整个main函数内,而num2在出了大括号后就不能再使用了,这就是他们的作用域。
全局变量在整个工程的任意地方都可以使用,所以全局变量的作用域就是整个工程。工程结束了全局变量的作用域才结束。
生命周期
一辆车从生产到他报废后,这就是它的生命周期,从刚生产出来生命周期开始,到报废生命周期结束。一个变量的生命周期也是如此,从创建产生,到销毁而结束。
请注意:一定是当程序走到创建变量那条语句后生命周期才开始,作用域也是在生命周期开始后才开始的。下图的num3没有创建,生命周期还没开始,num3是作用域也没有产生。
全局变量的生命周期是整个工程,当工程结束全局变量的生命周期结束,也可以理解为这个工程的main函数结束后,全局变量的生命周期也跟着结束了。
字符串的定义
C语言有两种定义字符串的方法:
#include<stdio.h>
int main()
{
char str1[]="abcd";
char str2[4]={'a','b','c','d'};
//%s 打印字符串
printf("%s\n",str1);
printf("%s\n",str2);
return 0;
}
当我们用%s打印两个字符串时,发现str1正常打印了,但是str2打印了一组随机值,为什么呢?我们调试一下代码,我用编译器是【Visual Studio 2019】
按键盘上的F10进入调试状态
仔细观察监视,str1的末尾位置比str2的末尾多出了一个'\0',这个'\0'其实就是字符串的结束,当printf打印字符串执行到'\0',就停止打印,str2的末尾并没有'\0',所以才会有随机值。改正的方法和很简单,只要在str2的末尾也放一个'\0'就行了。
注意:'\0'是一个字符,也占一个空间大小。
#include<stdio.h>
int main()
{
char str1[]="abcd";
char str2[5]={'a','b','c','d','\0'};
//%s 打印字符串
printf("%s\n",str1);
printf("%s\n",str2);
return 0;
}
strlen(计算字符串长度)函数用法
头文件:#include<string.h>,strlen函数是用来计算字符串长度的函数,strlen函数也是读取到'\0'后就停止读取,然后返回参数。
虽然都打印了4,但是明显str2那报了个警告,str2没有终止符'\0'。虽然这不足以说明strlen是遇到'\0'后就终止继续打印了。
当我对代码稍作修改,在'\0'的后面继续添加字符并放上'\0',len2依然打印的是4,说明strlen在读到'\0'时就返回了。
结语
天气转凉请各位终于防寒保暖~