当前位置: 首页 > news >正文

江宁网站建设报价广西网站seo

江宁网站建设报价,广西网站seo,网站seo工作内容,招聘做微信公众号网站维护文章目录前言一,static关键字的作用二,const 关键字的作用2.1, 修饰局部变量2.2,修饰指针2.3, 修饰函数形参2.4,修饰函数的返回值三,volatile关键字的作用前言 面试的时候,C语言最常…

文章目录

  • 前言
  • 一,static关键字的作用
  • 二,const 关键字的作用
    • 2.1, 修饰局部变量
    • 2.2,修饰指针
    • 2.3, 修饰函数形参
    • 2.4,修饰函数的返回值
  • 三,volatile关键字的作用


前言

面试的时候,C语言最常问的三个关键字:static、const、volatile的作用,你是否能回答完整呢?


一,static关键字的作用

  • 修饰局部变量,会改变局部变量的生命周期,不改变作用域(在函数执行完后,该静态局部变量还在,不会被释放,但不能在其它地方使用);静态局部变量的初始化只会执行一次
  • 修饰全局变量,表示该全局变量只能在本文件使用,不能跨文件使用
  • 修饰函数,表示该函数只能在本文件中使用,不能跨文件使用

static修饰的变量存放在静态存储区,会默认初始化为0,而且修饰的全局变量和函数只能在本文件中使用,可防止重名。

二,const 关键字的作用

const 是 constant 的缩写,意思是“恒定不变的”!用来定义只读变量的,或者说 const 是定义常量的关键字

2.1, 修饰局部变量

被修饰变量的值不能改变。用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了。

const int i = 10;        //正确
int const i = 10        // 正确,这两种写法是等价的
i = 20;                //错误,常量值不可被改变
const int j;          //错误,未被初始化

2.2,修饰指针

可以指定指针本身为const,也可以指定指针所指的数据为const
常量指针,本质上是个指针,指针指向的内容是常量,指针本身是可以变的,可指向其他地址

int a = 5;
int b = 10;
const int* n = &a;
int const* n = &a;  //这两种定义方式都是一样的,表示常量指针
*n = 6;  //错误,不能改变 n所指向对象的值
a = 6;  //正确,不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。
n = &b;  //正确,常量指针指向的指不能改变,但指针可变,可指向其他地址

指针常量,本质上是个常量,表示常量是个指针类型,不能再指向其他的地址,指向的内容可变

int nValue1 = 10;
int nValue2 = 20;
int* const constPoint = &nValue1;
//constPoint = & nValue2;  //错误,不能改变constPoint本身的值
*constPoint = 40;  //正确,可以改变constPoint所指向的对象,此时nValue1 = 40

指向常量的常指针
是以上两种的结合,指针指向的位置不能改变并且也不能通过这个指针改变变量的值,但是依然可以通过其他的普通指针改变变量的值。

const int nConstValue1 = 5;
const int nConstValue2 = 15;
const int* const pPoint = &nConstValue1;
//*pPoint  = 55;  //错误,不能改变pPoint所指向对象的值
//pPoint = &nConstValue2;  //错误,不能改变pPoint本身的值

const助记方法
把一个声明从右向左读。( * 读成 pointer to )

char * const cp;  // cp is a const pointer to char
const char * p;   // p is a pointer to const char;
char const * p;   // 同上

2.3, 修饰函数形参

根据常量指针与指针常量,const修饰函数的参数也是分为三种情况

  • 防止修改指针指向的内容
    void StringCopy(char* strDes, const char* strSrc);
    其中 strSrc是输入参数,strDes是输出参数。给 strSrc 加上 const 修饰后,如果函数体内的语句试图改动 strSrc 的内容,编译器将指出错误。
  • 防止修改指针指向的地址
void swap ( int* const p1 , int* const p2 )

指针p1和指针p2指向的地址都不能修改。

  • 以上两种的结合。
void swap ( int* const p1 , const int* const p2 )

2.4,修饰函数的返回值

如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
举个例子:

const char* GetString(void);
char* str = GetString(); // 错误,会出现编译错误
const char* str = GetString();  // 正确,类型要一致

三,volatile关键字的作用

volatile 本意是“易变的”,指变量是随时可能发生变化的。系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。即变量前加这个关键字,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问

  • 存储器映射的硬件寄存器
  • 一个中断服务程序中修改的供其它程序检测的变量
  • 多线程中各任务间共享的变量,可以关闭系统调度
    这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在a)中只能依靠硬件的良好设计,b)中可以通过关中断来实现,c)中禁止任务调度。

编译器的优化:

在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。
当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。
当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。

其他问题
1)一个参数既可以是const还可以是volatile吗?
可以的,例如只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
2) 一个指针可以是volatile 吗?
可以,当一个中服务子程序修该一个指向一个buffer的指针时。

http://www.ds6.com.cn/news/95392.html

相关文章:

  • 网站开发维护招聘什么是百度快照
  • 山西网站建设报价单品牌推广的作用
  • 外贸做零售的网站搜索引擎营销总结
  • 北京最新疫情发布会直播优化问题
  • 学会网站建设的重要性软件开发app制作公司
  • 电商直播系统app开发win优化大师有用吗
  • 百度手机模板网站广州企业推广
  • 广东省建设厅官方网站网址seo搜索是什么
  • 办个网站需要多少钱百度网盘下载
  • 外包公司注册需要什么seo1新地址在哪里
  • 做网盟的网站必须备案游戏推广是干什么的
  • 兰州h5页面制作seo技术交流
  • 精美网站界面免费关键词搜索工具
  • 饿了么如何做网站推广google学术搜索
  • 网站建设售后培训seo优化总结
  • 需要推销自己做网站的公司如何制作一个网页
  • 购买网站服务如何做支出百度官方优化指南
  • 清华紫光做网站足球积分排行榜最新
  • 做搜狗网站点击赚钱营销网站建设选择原则
  • 宁波网站优化方法有了域名如何建立网站
  • 专业网站优化公司排名产品设计公司
  • 有在网上找做网站的人么百度客服电话24小时人工服务热线
  • 网站验证码怎么做域名信息查询网站
  • 做淘宝主要看哪些网站有哪些内容谷歌关键词
  • wap手机网站建设方案广告代运营公司
  • 微信怎么设计分享网站在哪个网站可以免费做广告
  • 网站建设界面建议安徽百度推广怎么做
  • 网站网页优化技巧北京谷歌优化
  • 众筹网站开发需求网址域名查询
  • 建设网站公司营口建网站的公司