C语言基础的一些细枝末节

文章目录

一、必须理解的几个概念

1.变量的作用域和生命周期

(1)作用域:

作用域(scope)概念:一段程序代码中所用到的名字并不是总是有效的,限定这个名字的可用性的代码范围就是这个名字的作用域。

①局部变量的作用域是变量所在的局部范围。
②全局变量的作用域是整个工程
③局部变量与全局变量重名时,局部变量优先
举个例子:

#include<stdio.h>
int a = 10;
int Add(int z, int b)
{
	int a = 100;
	return a + b;
}
int main()
{
	int a = 3;
	int b = 4;
	printf("%d", Add(a, b));
}

代码结果如下:在这里插入图片描述
可以看到尽管变量a有三次重复,优先选取局部,即在Add函数里面定义的变量a。
再举个例子:

#include<stdio.h>
int a = 10;
void test()
{
	int a = 3;
	a++;
}
int main()
{
	test();
	printf("%d", a);
}

在这里插入图片描述
在test函数里面优先使用局部变量a,出了test函数变量销毁,因此在main函数里头a还是全局变量的a,即a=10。

(2)生命周期

生命周期的概念:变量的生命周期指的是变量从创建到销毁的一个时间段。

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

二、转义字符

(1)
转义字符(Escape Character)是指在ASCII码和Unicode等字符集中的无法被键盘录入的字符、被当作特殊用途而需要转换回它原来的意义的字符。

ASCII编码中的转义字符对应意义如下:
在这里插入图片描述
比如下面这道笔试题:
请回答该段代码输出什么:
在这里插入图片描述
输出结果如下:
在这里插入图片描述
其中的\t,\62为转义字符,在字符串中只占据一个字节。

三、常见的关键字

在这里插入图片描述

(1)关键字 typedef

typedef 顾名思义,是用来重命名类型。 例子如下:

在这里插入图片描述

(2)关键字static

static用来修饰变量和函数:
①修饰局部变量-称为静态局部变量
②修饰全局变量-成为静态全局变量
③修饰函数-成为静态函数
①修饰局部变量

例子:分析下面两段代码
代码一:

#include <stdio.h>
void test()
{
	int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		test();
	}
	return 0;
}

运行结果如下:
在这里插入图片描述
可以看到由于test函数中的变量i出了函数作用域生命周期结束,自动销毁。
第二段代码:

#include <stdio.h>
void test()
{
	//static修饰局部变量
	static int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
    int i=0;
	for (i = 0; i < 10; i++)
	{
		test();
	}
	return 0;
}

运行结果如下:
在这里插入图片描述
可以看出static改变了test函数中的i变量的生命周期,i即使出了函数作用域依旧存在,直到程序结束。(static将栈区的变量i放到了静态区中)

②static修饰全局变量

修饰前:
在这里插入图片描述
(其中使用外部源文件的全局变量需用extern声明)
用static修饰后:
在这里插入图片描述
即全局变量用static修饰后,变量只能在本源文件内使用,不能在其他源文件内使用。

③修饰函数:

修饰前:
在这里插入图片描述
(使用外部源文件的函数不需要用extern声明)
修饰后:在这里插入图片描述
可以看到static修饰函数与修饰全局变量的效果如出一辙,事函数只能在本源文件内使用,不能在其他源文件内使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值