初识C语言(二)

53cd8dcdf6294c3e87c4cff71f4f5b20.png

变量的作用域和生命周期

作用域

        请看下面简单的代码:

#include <stdio.h>

void add()
{
	int t = 2;
	printf("%d\n", t);
}
int t = 3;
int main()
{
	int t = 0;
	t++;
	printf("%d\n", t);
	printf("hehe\n");
	add();

	return 0;
}

        我将C语言两个大括号括起来的部分称为程序块。变量的作用域就是变量的有效范围,和数学中的函数定义域有异曲同工之妙。在程序块中,变量的作用域就是自声明变量开始到该程序块结束这段区域。虽然程序块可以嵌套,但变量的作用域并不会因程序块的嵌套而有所增大。在上文的代码中,一共定义了3个变量t,从上到下,他们的作用域分别为add函数,整个程序,main函数。再看一段伪代码

for (int i = 0; i < 10; i++)
{
	......
}

        在该代码中,i就只在for循环内有效,在之外则无效。

int i = 0;
for (i = 0; i < 10; i++)
{
	......
}

        而该代码中,i在for循环内仍然有效。 

        如果全局变量和局部变量同名,那么在局部变量作用域内使用变量时会优先使用局部变量。

生命周期

         全局变量的生命周期是整个程序,局部变量则是进入作用域,生命周期开始;出作用域,生命周期结束。

常量

        C语言常量有四种类型

字面值常量

const修饰的常变量

#define修饰的标识符常量

枚举常量

#include <stdio.h>
#define PI 3.1415

enum gender// 枚举
{
	Mail,
	Femail,
	Unknown
};
int main()
{
	56;//字面常量
	const int a = 25;//const 常变量
	int const b = 56;
	a = 5; b = 8;
	return 0;
}

        编译时,它会报错:

3bca38941b514482b5a5586b92236505.png

        因为const修饰的变量无法修改。

字符串

         “hello world.\n”

         这样由双引号引起来的一串字符被称作字符串字面值,简称字符串。字符串结束标志是转义字符‘\0’,在计算字符串长度时,‘\0’不会算作字符串内容。

        虽然上文字符串没有'\0',但是C语言在存储时会自动在末尾加上'\0'。看一段代码:

#include <stdio.h>

int main()
{
	char str1[] = "Hello world!";
	char str2[] = { 'a', 'b', 'c' };
	char str3[] = { 'a', 'b', 'c', '\0' };
	printf("%s\n", str1);//%s 打印字符串的格式化符号
	printf("%s\n", str2);
	printf("%s\n", str3);

	return 0;
}

        它的结果如下: 

de9393d6c626456dba342bbb220f1467.png

        为什么第二个和第三个打印结果不同?首先字符串可以看做一种特殊的字符数组。在初始化那两个字符数组时,我们是以字符形式进行初始化,C语言并不会自动在储存时添加'\0'。所以在打印第二个时,它会一直打印,直到遇到'\0'停止打印;第三个因为我们手动添加'\0',所以只打印abc。

转义字符

         在上文我们谈到了'\0',C语言的转义字符不止这一个。转义含义是转变意思,在字符串和字符中用处很大。

5ec59c9453e845e58246f3f32da780ad.png

        上图便是C语言的所有转义字符。第二个到第四个主要在字符串中使用。例如,如果你要打印一个文件路径: 

#include <stdio.h>

int main()
{
	printf("D:\Lenovo\PCManager");

	return 0;
}

        结果如下: 

5675506984f54bea8d9fbb9de90154eb.png

        为什么反斜杠会消失,实际上我也不知道,毕竟是随手写的。初步分析C语言将形如'\'+字符的形式看做转义字符,但打印的这个字符串中,两个都是无效的,因此无法作为转义字符使用,所以会打印出L和P,而单纯的反斜杠则被省略了。如果读者有更好的见解,希望在评论区告知。

        5~11的转义字符主要是一些特殊作用,最后两个则可以表示字符。

字符常量

         我们一般使用字符常量来给字符型变量赋值。一般由单引号括起来的单个字符被称为字符常量。字符常量由四种形式

#include <stdio.h>
int main()
{
	char a = 65;//使用相应字符的ASCII码
	char b = 'A';//单引号括起来的字符
	char c = '\101';//转义字符8进制
	char d = '\x41';//转义字符16进制
	printf("%c\n", a);
	printf("%c\n", b);
	printf("%c\n", c);
	printf("%c\n", d);

	return 0;
}

        结果如下:

 cb4db002061b497d841166cb634b8f90.png

        注:使用转义字符表示字符时,一定要加单引号。 

        之后的知识,可以在相应章节进行讲解,现在应该可以写一个hello world吧?

        这里再说一下题外话,作者当时学C语言是看《C Prime Plus》的,这本书非常的细致,但我当时看时,看到数据类型就不想看了,因为太多了!!!他讲数据类型太细腻了(以我水平来看),我觉得当时我如果看《C与指针》可能情况就不是现在这样。当然也许是作者我太懒了(〃'▽'〃)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值