const指针和指向const对象的指针

来源:互联网 发布:情趣用品,淘宝免费代理 编辑:程序博客网 时间:2024/05/22 06:36

1.有关const指针和指向const对象指针的一道题:

首先要说明的是怎么来判断const指针还是指向const的指针:

如果const后面跟的是类型,那么const是用来修饰对象的,所以它是指向const对象的指针

但是如果const后面跟的是指针本身,那么const是用来修饰指针的,所以它是const指针

可以这么理解,const在*号左边,那么它修饰指向const对象的指针,但是const出现在*号右边,那么是const指针。

typedef string *pstring;

const pstring cstr;
请问cstr是什么类型的?
按我之前的理解是将string *代替原先的pstring,最终得到的是const string *cstr;
那这样来看的话,cstr是一个指向const对象的指针。
但正确答案是:const是用来形容pstring的,而pstring是一个指针类型,所以它应该是一个const指针,等价于:string * const cstr
const指针是不能修改它的指向,而指向const对象的指针是不能修改指针所指向的内容
2.最近观察到一种求解数组大小的方法int a[]=(....); sizeof(a)/sizeof(*a)就是这个数组的元素个数

这样我们在使用数组作为函数参数的时候,使用两个参数,第一个参数传递数组的首个元素的地址,第二个参数传递数组的大小。

3.静态局部变量只被初始化一次,从第一次被初始化到程序运行结束都是存在的,对定义它的函数体始终是可见的。静态局部变量可以用来在某个函数的多次调用之间传递参数。见如下的例子:

#include<iostream>using namespace std;int count(){    static size_t count=0;//申明的是静态局部变量    return ++count;}int main(){    for(int i=0;i<10;i++)    cout<<count()<<endl;//虽然函数被调用了10次,但是count的初始化是只执行了一次。                                    //在第二次调用的时候,第一次调用所修改的count值是可以使用的。    return 0;}

4.类内定义的成员函数是内敛函数,所以我们不要将比较复杂的函数定义放在类内。

5.若没有给内置类型(比如int)的全局变量和静态变量初始化,那么系统默认的值是0...,但如果是局部变量系统是不会对它进行初始化的。

6.看unp里面的一句:typedef void Sigfunc(int);我就再纳闷这句话到底是什么意思。后来翻看c++ primer 的指向函数的指针那一节才明白,Sigfunc代表了一种返回值为void,形参为一个int的函数类型。另外在typedef bool (*FuncPtr) (int,int);表示的是将FuncPtr定义为指向返回值为bool,有两个int型的形参函数类型的指针。返回指向函数指针的函数:int(*ff(int))(int*,int);用上typedef才使得这个表达式容易理解:typedef int(*PF)(int*,int); PF ff(int);ff这个函数返回了一个指向函数的指针。 到现在才对c++中的typedef有比较深入的了解,惭愧惭愧!!

7.指向const对象的指针是一种“自以为指向const对象的指针”:其实它可以指向const对象,也可以指向非const对象:

int deval=5;

const int * pdeval;

pdeval =&deval;

这是允许的。

所以这句论断是错误的:指向const对象的指针所指的一定是const对象。(X)


原创粉丝点击