赞
踩
在新手上路C语言初识C语言(其一)中我们知道了在C语言中我们需要自己定义一些变量以及变量的定义格式和基本使用方法,今天我们继续来学习关于变量的作用域和生命周期,和一些特殊的常量或变量,字符串,转义字符,注释,还要初步认识一下选择语句和循环语句的概念,好的,那么今天的学习就要开始了。
我们都知道变量有局部变量和全局变量,那么局部变量和全局变量的作用域都是哪些呢,我们来结合以下的代码分析一下
int main()
{
int i = 10;
printf("%d\n",i);
return 0;
}
int i = 10;
int main()
{
printf("%d\n",i);
return 0;
}
这两个代码运行起来的话结果会是一模一样的结果,也就是变量i不论是全局变量还是局部变量这样都可以正常使用,而如果我们将代码这样写
void test()
{
int i = 10;
}
int main()
{
printf("%d\n",i);
return 0;
}
这样的话编译器就会报错,从以上我们可以看出,局部变量只能在其代码块内使用,而全局变量的作用域在哪里都能用,其实如果你将全局变量即使放到另一个源文件里面只要使用得当,也是可以使用的,也就是说,全局变量的作用域是整个工程,以上就是对变量的作用域和生命周期的解释,我们来总结一下:
局部变量的作用域是其所在的局部范围
全局变量的作用域是整个工程
接下来我们来看变量的生命周期,我们先来理解一下生命周期的概念,生命周期指的是变量从创建到销毁的时间段,我们结合一下代码来理解
void test() { int i = 0; i++; printf("%d\n", i); } int main() { int a = 0; while (a<10) { test(); a++; } return 0; }
该程序的运行结果是打印出十个1,从这里可以看出局部变量i每次进入test函数会被创建,而每次出test函数即会被销毁,所有可以得出结果局部变量的生命周期其实是它的作用域,相同的,如果你去测试会发现全局变量的生命周期其实是整个程序,总结:
局部变量的生命周期从进入作用域开始,出作用域生命周期结束
全局变量的生命周期是整个程序的生命周期
C语言中的常量大致可以分为以下几种
字面常量就是我们常见的数字,字符,字符串等这些常量,例如数字123,字符‘a’这些量是不可以被随便修改的,称为字面常量;
const修饰的常变量,可能咋一听不太对劲,我们通常说常量变量,但是常变量是怎么一回事呢,我们来结合代码分析,
int main()
{
const int g_val = 10;
g_val = 8;
printf("%d\n",g_val);
return 0;
}
如果你将这段代码放入编译器中运行的话,编译器就会报错提示一下结果
那么这也就是说变量g_val具有了常量的属性,它的值是不能被修改的,但是我们为什么说它还是一个变量呢,我们可以用一下验证一下,我们用数组来验证,对于数组来说,在定义数组的时候它的大小是不能是变量的只能是常量,如果我们将const修饰的常变量放到数组中呢,如果被const修饰后变量i变成了常量那么应该能够定义数组,如果不能就说明,即使i具有了常属性但是它依旧是一个变量,我们来看以下代码和结果
int main()
{
const int i = 0;
int arr[i] = {0};
return 0;
}
从这里我们不难看出,变量i依旧还是一个变量,即使被const修饰具有了常属性,看到这里,我们就理解了const修饰常变量到底是个什么来头。
#define定义的标识符常量,我们先来看下面代码了解一下基本格式
#define M 100
int main()
{
printf("%d\n",M);
return 0;
}
这里的M就是我定义的标识符常量,那么它有什么特性呢,没错,既然是常量那么它的值肯定是不能修改的,我们可以来验证一下,
#define M 100
int main()
{
M = 20;
printf("%d\n",M);
return 0;
}
可以看到是不可行的,我们还可以用上面定义数组的方法来看一下,
可以看到,代码是没有什么问题的,看到这里,我们就理解了#define定义的标识符常量。
枚举顾名思义就是一一的列举,而在C语言中给出了这样一种方式,枚举的关键字是enum,来看下面代码
可以看到,枚举常量的值是从0开始,一次向下增加,我们只认识即可,具体的用途放到之后来讲。
我们知道单个字符要用‘’引起来,那么如果我们要表示一串字符呢,这时候就引入了字符串的概念,例如"hello world",这种由双引号引起来的一串字符就叫做字符串,一个字符串的长度是多少呢,这里就要引入一个函数strlen,这个函数是C语言中专门用来计算字符串长度的函数,要使用这个函数需要引用头文件,具体的用法是这样的,看下面代码示例
可以发现我的字符串长度是5,而末尾加了一个\0,这个\0其实是字符串的结束标志,如果没有加这个\0的话,你会发现每次打印出的值都不一样甚至会出现一些乱码,例如烫烫烫烫之类,那么解决办法就是在字符串末尾加上\0,那么我们来看一下\0的值是多少
可以看到\0的值是0,所以我们在字符串末尾加0和\0的结果其实是一样的,都可以作为字符串结束标志,另外字符串还有一种表示方式,在初始化的部分可以采用以下形式
int main()
{
char arr[] = {'a','b','c','\0'};
return 0;
}
转义字符,顾名思义就是转变它本来的意思,C语言中的转义字符大概有以下这些,
转义字符 | 解释 |
---|---|
\’ | 用于表示字符常量’ |
\" | 用于表示一个字符串内部的双引号 |
\\ | 表示一个反斜杠,防止被转义 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1到3个八进制数字 |
\xdd | dd表示两个十六进制数字 |
我们这里只简单介绍几个,有些不常用的不作过多解释
1.'\n’换行符,这个我们天天用,例如
如果没有‘\n’的话打印结果就是abcdef,而图中在中间是换行的效果
2.‘\a’,这是个很有意思的转义字符,推荐大家自己动手试一下,
int main()
{
char ch[] = "\a";
printf("%s",ch);
return 0;
}
直接打印的时候电脑会有蜂鸣的声音,也是计算机上常常听到的警报声
3.‘\ddd’,这里面ddd指的是1~3个八进制数字,会被转义成特殊的字符,我们来看一个例子,
可以看到最终我打印出的结果是个冒号,这个冒号是怎么来的呢,原理其实是073这个八进制序列如果转化成十进制数的话,就是冒号所对应的ASCII码值。
4.‘\xdd’,原理同上,只是要注意是十六进制数字。
转义字符暂且就先介绍这几个吧,接下来我们来看一下注释。
关于注释,主要有两个作用
1.代码不想要了,但又觉得删掉可惜,或者临时不用,可以注释掉
2.代码中有些地方难懂,可以用注释来解释说明
C语言中一般有两种注释风格,一种是/xxxxxxx/,另一种是//xxxxxxx
现在基本都用第二种C++的注释风格了,因为第一种如果嵌套使用的话容易导致问题,所以推荐大家尽量使用第二种。在编译器中注释掉的代码会有颜色变化,一般是绿色,如下图
当然了这些代码没有什么本身的意义,只是为大家演示一下注释的效果。
假如现在给你两个选择,1好好学习,最终成为大佬拿到好的offer,2随大流打游戏娱乐,而这两种选择的结果肯定是不一样的
那么在C语言中怎么来实现呢,看下面代码
int main()
{
int i = 0;
printf("你要好好学习吗\n");
printf("好好学习请输入1,打游戏请输入2\n");
scanf("%d",&i);
if (i == 1)
printf("成为大牛,拿到好offer\n");
else if(i==2)
printf("回家卖红薯\n");
else
printf("输入错误\n");
return 0;
}
分析这个代码我们就达到了实现选择的目的,当然我们今天只是举个简单的例子,后面我们再深入学习分支与循环的知识,关于选择语句,我们就点到为止。
假如你开始学习编程,每天坚持学习,如果有一天你的代码积累量达到了十万行,这个时候你成了大牛,可以走上人生巅峰了,在这期间肯定每天都要敲代码,这就是一个循环的例子,那么这个例子我们在C语言中怎么实现呢,
int main()
{
int line = 0;
while (line <= 100000)
{
printf("敲代码%d\n",line);
line++;
}
if (line > 100000)
printf("成为大牛\n");
else
printf("好好学习,天天编程\n");
return 0;
}
关于循环语句呢,其实有三种类型,每一种都有其独特的功能,今天我们只稍微举了一个while循环的例子,这三种类型有
关于分支和循环我们放到之后再来深入学习,今天的新手上路C语言初识C语言(其二)系列内容属实也不少了,今天就到这里吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。