C语言基础的一些细枝末节
文章目录
- 一、必须理解的几个概念
- 1.变量的作用域和生命周期
- (1)作用域:
- (2)生命周期
- 二、转义字符
- (1)
转义字符(Escape Character)是指在ASCII码和Unicode等字符集中的无法被键盘录入的字符、被当作特殊用途而需要转换回它原来的意义的字符。
- (1)
- 三、常见的关键字
- (1)关键字 typedef
- (2)关键字static
- ①修饰局部变量
- ②static修饰全局变量
- ③修饰函数:
一、必须理解的几个概念
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修饰函数与修饰全局变量的效果如出一辙,事函数只能在本源文件内使用,不能在其他源文件内使用。
C语言基础的一些细枝末节相关推荐
- 【python语言基础】疑难点整理2
[python语言基础]疑难点整理1 第五章 在python语法中,循环体中的语句没有做限制,因此,可以是任何合法语句,当然也可以是循环语句.这样就形成了循环语句的嵌套. while循环语句和for循 ...
- r语言 断轴 画图_R语言基础画图/绘图/作图
R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介绍. 0 结构 每种图形构成 ...
- fig r函数_R语言基础绘图函数散点图~跟着Nature Communications学画图~Figure1
今天继续 跟着Nature Communications学画图系列第二篇.学习R语言基础绘图函数画散点图. 对应的 Nature Communications 的论文是 Fecal pollution ...
- 学单片机需要多少C语言基础,C语言单片机编程教程
很多学员和朋友经常找我给他们推荐C语言的书,他们可能想和我当年一样,闷头大干一场,学个几个月的C语言,把C语言吃透,再开始单片机程序开发! 别!别!别! 大家千万别这么干,我当年自学了3个月的C语言, ...
- %3c- r语言运算符,R语言基础教程之运算符
原标题:R语言基础教程之运算符 运算符类型 在R编程中有以下类型的运算符 - 算术运算符 关系运算符 逻辑运算符 赋值运算符 其他运算符1.算术运算符 下表显示了R语言支持的算术运算符.运算符对向量的 ...
- c++把数组所有元素剔除_C语言基础之数组,第一节,C语言必学知识点剖析
本文约1600字,主要讲了C语言基础之数组.数组又可分为数值数组.字符数组.指针数组.结构数组等各种类别.本文主要讲了数组的基础概念,一维数组的定义和引用. 带你进入C语言的世界,入门C语言,后边将持 ...
- matlab语言实验二,实验二 MATLAB语言基础
实验二 MATLAB 语言基础 一.实验目的 基本掌握 MATLAB 向量.矩阵.数组的生成及其基本运算(区分数组运算和矩阵运算).常用的数学函数.了解字符串的操作. 二.实验内容 (1) 向量的生成 ...
- R语言基础知识详解及概括
R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建
- 实验四 数据库SQL语言基础编程
-- 实验四 数据库SQL语言基础编程 -- 实验目的: -- 掌握数据库查询语句的编写方法 -- 掌握利用查询语言完成基本查询 -- 掌握利用SQL语句完成数据的添加.删除.修改操作 -- 实 ...
最新文章
- 【组队学习】【33期】动手学数据分析
- Linux下双网卡绑定(bonding技术)
- Linux fork()一个进程内核态的变化
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 2 Week 3 TensorFlow Tutorial
- 隐藏键盘_三星新专利:带有隐藏键盘的三折叠屏手机
- 与高通公司合作的Cyanogen团队,Thunderbird等等
- 路由到另外一个页面_如何在多个页面中,引入一个公共组件
- python super()方法的作用_详解python的super()的作用和原理
- 医院各领域榜单。22个科室、100种常见疾病
- packet和frame区别
- SVG线条动画实现蚂蚁线
- STM32通过串口控制LED闪烁或者呼吸效果
- 不间断:即使被刺破,新的软电子设备也不会损坏
- 【爬虫】如何解决爬虫爬取图片时遇到百度安全验证的问题?即页面上没有显示图片的源地址,没有img标签,只有div标签
- 移动端开发的屏幕、图像、字体与布局的兼容适配
- matlab输出多个参数到表格固定列,matlab将excle的列提取出来?如何使用Matlab提取Excel中指定列的数据?...
- 【CSDN】CSDN图片居中
- 问题(ArcGIS):去除栅格不需要的Value(背景值0)
- PTA实验3-1 求一元二次方程的根 (20 分)
- php小数点后保留一位或两位小数
热门文章
- 满血复活~喵呜~喵~呜~
- 再厚的马赛克都能被扒干净?这款「去码」神器火了
- 密码打马赛克已经不安全了!这款开源的去 “马赛克” 工具一秒还原
- Android 自定义数字角标
- 如何禁用 Microsoft Edge 自动更新(Windows、macOS)
- 网件R6220刷机失败
- pyhton获取 中国各个省份/直辖市拥有的上市公司数目
- 华文行楷字帖欣赏_任政行书唐诗字帖欣赏:工整秀丽、雄健挺拔!初学书法的好字帖...
- Vue中使用百度地图做路径分析并根据起终点坐标模拟道路里程桩
- 给中年工程师的忠告 转自前辈工程师 “嵌入式玩家”