关闭

C++88个注意点子之6~10

标签: C++语言
238人阅读 评论(0) 收藏 举报
分类:

6.void *指针,用于保存任何类型的地址,也可以赋值给指向任何类型的指针,但不能用void*指针操作对象。

对于这点,和C语言一样,void其实是一种语法性的类型,并不是数据类型,用于作为函数的参数或返回类型,或者指定void*指针。


int n = 6;
void *ptr = &n;
printf("%d\n", *((int*)ptr));

这样可以正确的输出n的值,ptr指向n的空类型指针,可以显式的将ptr转换成int *类型。

再次说明void t ;这样声明t是错误的。


7.指向const对象的指针:const double *p;

指向const对象的void指针:const void *p;

注意:(1)只能用const void*来保存const对象地址。

(2)可用非const对象地址赋给const对象指针。


8.const指针(本身不能修改)

int *const ptr 定义时要初始化,但不能再对ptr赋值,因为ptr的值是常量不能改变,但是可以改变它指向的int型变量值。


9.typedef string *pstring;

const pstring cstr;

这个是c++ primer上面的例子,猜猜cstr代表的是什么?

typedef并非是一般的文本扩展,和#define不一样。

这句话的意思是cstr为const的,指向string类型的指针。

分析:首先pstring是string类型的指针,然后const pstring表示指针常量。

其实const pstring和pstring const表达是一样的。我们写成pstring const会更好了解。

如果是pstring const cstr;可以将const cstr代替typedef定义中的pstring便一目了然了。

值得注意的是对于值常量定义const放前放后无区别,但是对于指针常量和指向常量指针时const的位置很重要。

在看到typedef const常量的时候一定要注意,认真分析!!!


10.new 与 delete表达式

int *ptr = new int[size]; 改表达式遵循全局和局部变量的默认初始化,即为全局变量时初始化,局部则不初始化。

在写程序的时候,初始化总是好的,所以推荐new值初始化

值初始化:new int[size]();全部初始化为0。对于类类型的话,这样就调用类的默认构造函数初始化。

注意:size值为0也可以(java中也是一样的),但是ptr不能解引用。

delete[] ptr; 释放数组。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:50893次
    • 积分:1112
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:0篇
    • 译文:0篇
    • 评论:31条
    文章分类
    最新评论