面试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我习惯起一个类, 里面全 ...
随机推荐
- 从主机给VM Copy文件
不能从主机给VM 复制文件,在VM里,setting --->option--->shareFolder-->enable-->add(要share的文件路径) then=== ...
- FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块(转)
1.Nginx的FastDFS模块什么作用? 我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传.下载.删除等操作.同时通过 FastDFS的HTT ...
- leetcode第一刷_Symmetric Tree
必须承认,一開始这道题我是不会做的.由于我心目中的树遍历仅仅能用一个节点发起.多么天真而无知. 我想不通如何同一时候遍历两颗子树.由于根节点一定是一个啊.但是,作为对称轴上的它.从一開始就不应该被考虑 ...
- C#XML的序列化与反序列化
要序列化的对象的类: [Serializable]public class Person{private string name;public string Name{get{return name; ...
- IOS 单元测试
本文转载至 http://blog.csdn.net/fengsh998/article/details/8109293 IOS 自带单元测试. 1.在创建时,将include Unit Tests钩 ...
- EasyDarwin自动停止推流
原文转自:http://blog.csdn.net/ss00_2012/article/details/51441753 我们使用EasyDarwin的推流转发来进行媒体直播的时候,有时会有这样一个需 ...
- RTSP流媒体转发服务器源码
最新EasyDarwin已经支持海康.大华等标准RTSP/RTP协议的转发,代码及使用方法参看:用Darwin开发RTSP级联服务器(拉模式转发)http://blog.csdn.net/xiejia ...
- 驱动框架入门——以LED为例[【转】
本文转载自;http://blog.csdn.net/oqqHuTu12345678/article/details/72783903 以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵 ...
- powerbuilder
PowerBuilder美国Sybase公司研制的一种新型.快速开发工具,是客户机/服务器结构下,基于Windows3.x.Windows95和WindowsNT的一个集成化开发工具.它包含一个直观的 ...
- Matlab小技巧之怎么复制汉字
在我们复制Matlab到Word的过程中,经常会出现乱码的情况.这时候可以这么做. 1.复制Matlab代码. 2.新建一个txt文件,将代码粘贴到txt文件中. 3.复制txt文件中的代码到Word ...