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和静态变量那些事儿的更多相关文章

  1. Java静态变量的初始化(static块的本质)

    Java静态变量的初始化(static块的本质) 标签: javaclassstring编译器jdk工作 2010-02-06 07:23 33336人阅读 评论(16) 收藏 举报  分类: Jav ...

  2. C++中类中常规变量、const、static、static const(const static)成员变量的声明和初始化

    C++类有几种类型的数据成员:普通类型.常量(const).静态(static).静态常量(static const).这里分别探讨以下他们在C++11之前和之后的初始化方式. c++11之前版本的初 ...

  3. C++ static、const和static const类型成员变量声明以及初始化

    C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. sta ...

  4. 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 ...

  5. Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序

    //据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...

  6. 深入理解PHP内核(九)变量及数据类型-静态变量

    原文链接:http://www.orlion.ga/251/ 通常静态变量是静态分配的,他们的生命周期和程序的生命周期一样长,只有在程序退出后才结束生命周期,这和局部变量相反,有的语言中全局变量也是静 ...

  7. C++全局和静态变量初始化

    转自:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html 对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的 ...

  8. PHP的静态变量和引用函数

    直接贴代码,结果的原因写在备注了 <?php /** * Created by PhpStorm. * User: Administrator * Date: 16-8-25 * Time: 上 ...

  9. iOS使用静态变量

    之前看"Effective Objective-C 2.0", 第4条, 多用静态变量, 少用define. 正好我的项目有些东西是静态变量, 之前java我习惯起一个类, 里面全 ...

随机推荐

  1. CentOs中mysql的安装与配置(转)

    在linux中安装数据库首选MySQL,Mysql数据库的第一个版本就是发行在Linux系统上,其他选择还可以有postgreSQL,oracle等 在Linux上安装mysql数据库,我们可以去其官 ...

  2. Protostuff具体解释

    Protostuff具体解释 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一.Protostuff介绍 Proto ...

  3. 【MatConvNet】配置GPU

    参照大神的方法:http://www.th7.cn/system/win/201603/155182.shtml 第一步:需要安装cuda.VS2013:cuda默认路径,注意cuda版本和GPU要匹 ...

  4. 图像滤镜艺术---PS图层混合模式之明度模式

    本文将介绍PS图层混合模式中比較复杂 的"明度"模式的算法原理及代码实现内容. 说到PS的图层混合模式,计算公式都有,详细代码实现也能找到,可是,都没有完整介绍全部图层混合模式的代 ...

  5. 开源流媒体服务器--EasyDarwin

    欢迎加入我们的开源流媒体服务器项目:EasyDarwin, EasyDarwin是在Apple开源流媒体服务器Darwin Streaming Server(v6.0.3)基础上进行开发和维护的免费开 ...

  6. static 静态域 类域 静态方法 工厂方法 he use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class 非访问修饰符

    总结: 1.无论一个类实例化多少对象,它的静态变量只有一份拷贝: 静态域属于类,而非由类构造的实例化的对象,所有类的实例对象共享静态域. class Employee { private static ...

  7. 给js设定一个统一的入口

    javascript是种脚本语言,浏览器下载到哪儿就会运行到哪儿,这样的特性会为编程提供方便,但也easy使程序过于凌乱.支离破碎. js从功能上能够分为两大部分--框架部分和应用部分,框架部分提供的 ...

  8. Disruptor学习杂记

    慎入,有点乱,只是学习记录,disruptor_2.10.4 1.Disruptor对象有一个EventProcessorRepository对象   2.EventProcessorReposito ...

  9. [haoi2014]穿越封锁线

    这题需要注意的一点是射线法需要考虑边界,而且题目对边界的限制极为严格. dcmp(v[i%n].x-x)<=0&&dcmp(v[(i+1)%n].x-x)>0 dcmp(v ...

  10. SQL:内连接、左外连接、右外连接、全连接、交叉连接区别

    有两个表A和表B.表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据情况,即用select * from A出来的记录情况如下图1所示: 图1:A表数据表B结构 ...