面试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我习惯起一个类, 里面全 ...
随机推荐
- vim调试
首先,想调试一个程序的话,输入以下命令: guest-djjtew@ubuntu:~$ python3 -m pdb 1.py 这时候就停止了,等待着你的输入,然后输入"l"的话, ...
- mysql连接超时的问题
使用Hibernate + MySQL数据库开发,链接超时问题: com.mysql.jdbc.CommunicationsException: The last packet successfull ...
- C# 通过Hook的方法 屏蔽快捷键
#region 屏蔽Windows功能键(快捷键) public delegate int HookProc(int nCode, int wParam, IntPtr lParam ...
- C# Winform 中webBrowser显示html内容时禁止错误提示的方法
在winform中有一个控件可以显示html的内容,该控件就是webbrowser,设置它的DocumenText属性为HTML的内容即可. 在使用WebBrowser做UI的时候,我们有时不希望里面 ...
- source insight 配置小记
0/ Alt + T 打开 Document Options,设置字体,添加 C++ 类型文件 .cc , 删除 Plain txt 类型以避免添加 .txt 文件 1/ Alt + F12 切换函数 ...
- 图像处理之滤波---滤波在游戏中的应用boxfilter
http://www.yxkfw.com/?p=7810 很有意思的全方位滤波应用 https://developer.nvidia.com/sites/default/files/akamai/ga ...
- funhub 独立游戏团队诚邀策划,美术,技术,QA 大大加入(可远程办公)
我们刚成立的的独立游戏团队,base:广州,团队陆陆续续已经有 6 个成员了,现在还缺的岗位有策划,美术.不过有其 他岗位的仁人志士也可加入. 另外,我们支持远程办公,这是互联网行业的天然优势,一定要 ...
- Hibernate表关系映射之多对多映射
一.多对多的实现原理 在数据库中实现多对多的关系,必须使用连接表.也就是用一个独立的表来存入两个表的主键字段,通过遍历这张表来获取两表的关联关系. 而在我们的对象中,多对多是通过两者对象类中互相建立对 ...
- 九度OJ 1139:最大子矩阵 (矩阵运算、缓存)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1014 解决:376 题目描述: 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩 ...
- machine learning for hacker记录(3) 贝叶斯分类器
本章主要介绍了分类算法里面的一种最基本的分类器:朴素贝叶斯算法(NB),算法性能正如英文缩写的一样,很NB,尤其在垃圾邮件检测领域,关于贝叶斯的网上资料也很多,这里推荐那篇刘未鹏写的http://mi ...