面试6-----11 const和静态变量那些事儿
6 看看const和指针的那些事儿
const在int*左边
const在int*右边
const在int*两边------>请看代码注释
(1)代码
#include <stdio.h> int main()
{
const int x = ;//x为整形常量
int b = ;
int c = ; const int* a1 = &b;//const在int*的左边 用来修饰指针指向的变量即指针指向的为常量
int* const a2 = &b;//const在int*的右边 用来修饰指针本身 即指针本身是常量 所以不能修改本身
const int* const a3 = &b;//const出现在int*的两侧 所以不仅本身不能修改 指向的内容也不可以修改 //x = 2;//这里报错 左值为常量 a1 = &c;
//*a1 = 1;//a1指向的内容不可以改变 //a2 = &c;
//*a2 = 1;//const在int*的右边 用来修饰指针本身 即指针本身是常量 所以不能修改本身 //a3 = &c;
//*a3 = 1;
return ;
}
7 说明const与#define的特点与区别
(1)分别看看const和#define
#define a 10
int b;
b = *a;
#define:
a:编译器最开始的时候就会将#define a以后所有的代码中的a全部替换为10,然后进行编译
b:生命周期止于编译器,存在于程序的代码段,实际上就是一个常数
c:没有数据类型
const:
a:数据段,并分配了空间
b:有数据类型
c:可以进行安全性检查
8 c++中const有什么作用(至少三个)
(1)const定义的常量,编译器可以对其进行数据类型的安全检查
(2)const修饰函数形式参数 ,输入参数作为用户自定义类型和抽象数据类型是,将值传递改为const &传递可以提高效率
void func(A a)
void func(A const &a)
a:第一个函数会产生临时对象用于复制参数a,临时对象的构造 析构等都将消耗事件
b:引用传递不需要产生临时对象,但是只用a会改变a,所以加上const修饰
(3)const修饰函数的返回值:比如指针传递的函数返回值加const,返回就不能被直接修改,而且返回值只能被赋值给加const修改的同类型指针
const char *getchar(void){}
char *ch = Getchar();//error
const char *ch=Getchar();//correct
(4)const修饰类的成员函数,任何不修改数据成员的函数都应该加上const修饰(这样如果不小心修改了成员会报错提醒我们)
9 static的作用(至少两个)
(1) 函数体内,被申明为静态的变量,函数被调用的过程中都不会改变
(2)在整个模块内(函数体外),被申明的静态变量可以被模块内所有的函数访问,但是不能被模块外的访问,本地全局变量
(3)模块内,静态函数只能被这一模块内的其他函数调用。也就是这个函数被限制在声明它的模块的本地范围内使用(当前文件)
10static全局变量与普通的全局变量区别(c++)
(1)存储方式都一样------>静态存储方式
(2)static全局:限制了作用域,只能是定义变量的当前文件有效(如果源程序有多个文件)
普通全局:在各个原文件都有效
(3)static函数与普通函数作用域不同:
static函数:作用域本文件
总之:
(1) static全局与普通全局:
static全局只初始化一次,防止其他文件使用
(2)static局部和不同局部:
static局部变量初始化一次,下一次依据上一次结果值
(3)static函数与普通函数:
static函数在内存中只有一份,普通函数每次调用维持一份复制品
11 c++类的静态成员
#include <iostream>
using namespace std;
class widget
{
public:
widget()
{
count++;
}
~widget()
{
--count;
}
static int num()
{
return count;
}
private:
static int count;
};
int widget::count = ; int main()
{
widget x, y;
cout << "the num is" << widget::num() << endl;
if (widget::num() > )
{
widget x, y, z;
cout << "the num is" << widget::num() << endl;
}
widget z;
cout << "the num is" << widget::num() << endl;
return ;
}
(1)首先类中的静态成员或者方法不属于类的实例
(2)count的值就是类widget实例的个数
(3)结果

25行中两个实例下x,y然后29行3个实例,但是出了代码块(也就是括号)就没有了,最后一个实例所以3个。
好了,今天的这部分任务结束(呜呜呜,今天电脑好卡!!!!!!),小伙伴加油
面试6-----11 const和静态变量那些事儿的更多相关文章
- Java静态变量的初始化(static块的本质)
Java静态变量的初始化(static块的本质) 标签: javaclassstring编译器jdk工作 2010-02-06 07:23 33336人阅读 评论(16) 收藏 举报 分类: Jav ...
- C++中类中常规变量、const、static、static const(const static)成员变量的声明和初始化
C++类有几种类型的数据成员:普通类型.常量(const).静态(static).静态常量(static const).这里分别探讨以下他们在C++11之前和之后的初始化方式. c++11之前版本的初 ...
- C++ static、const和static const类型成员变量声明以及初始化
C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. sta ...
- c++ 反汇编 局部静态变量
vs2017下测试 34: for (int i = 0; i < 5; i++) 0029734E C7 45 F8 00 00 00 00 mov dword ptr [ebp-8],0 0 ...
- Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序
//据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...
- 深入理解PHP内核(九)变量及数据类型-静态变量
原文链接:http://www.orlion.ga/251/ 通常静态变量是静态分配的,他们的生命周期和程序的生命周期一样长,只有在程序退出后才结束生命周期,这和局部变量相反,有的语言中全局变量也是静 ...
- C++全局和静态变量初始化
转自:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html 对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的 ...
- PHP的静态变量和引用函数
直接贴代码,结果的原因写在备注了 <?php /** * Created by PhpStorm. * User: Administrator * Date: 16-8-25 * Time: 上 ...
- iOS使用静态变量
之前看"Effective Objective-C 2.0", 第4条, 多用静态变量, 少用define. 正好我的项目有些东西是静态变量, 之前java我习惯起一个类, 里面全 ...
随机推荐
- JavaScript 日期格式化 简单有用
JavaScript 日期格式化 简单有用 代码例如以下,引入jquery后直接后增加下面代码刷新可測试 Date.prototype.Format = function (fmt) { //auth ...
- Linux kernel Wikipedia
http://en.wikipedia.org/wiki/Linux_kernel Development model The current development model of the Lin ...
- MySQL windows集群(转)
http://blog.csdn.net/zhangking/article/details/5670070 MySQL 群集是 MySQL 适合于分布式计算环境的高可用.高冗余版本.它采用了 ...
- Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例及配置文件具体解释
Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例 一.调用java程序脚本(默认已经搭建好了Java环境) 1.jdk 安装路径 /usr/jdk/jdk1.7/-- 2.j ...
- Error (167005): Can't assign I/O pad "GX_TX" to PIN_AG27 because this causes failure in the placement of the other atoms in its associated channel
1.同时在两个GX的bank,建立两GX ip core 会出现 两个IP的cal_blk_clk信号,要保持是同一个时钟
- 关闭和定时显示DIV
<script type="text/javascript"> $(function(){ $('#ad1').css('display','block'); }) f ...
- JavaScript常用库
提供个学习几种库的url,记录下. 1.JavaScript简介 JavaScript是Netscape公司开发的一种脚本语言(scripting language).JavaScript的出现使得网 ...
- Java ClassLoader详解(转载)
Java ClassLoader详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK ...
- JSP页面的编码设置(转载)
1. pageEncoding:<%@ page pageEncoding="UTF-8"%> jsp页面编码: jsp文件本身的编码 2. contentType: ...
- 【BZOJ1528】[POI2005]sam-Toy Cars 贪心
[BZOJ1528][POI2005]sam-Toy Cars Description Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio ...