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

原创 2015年11月20日 10:30:43

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; 释放数组。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++88个注意点子之11~20

11. string 中又c_str()函数转换为char str[]; 但返回为const char *,要持续访问,则需复制c_str函数返回的数组。 注意:在C++中,string类型与cha...

C++88个注意点之1~5

最近仔细看了C++ primer,总结了一下C++中的一些值得注意的地方,与大家分享。也可以帮助一些从C过渡到C++的同学,更顺利地完成过渡。一共总结了88个小点,里面大都是我认为C++中比较重要的特...

C++88个注意点子之41~50

41.下面是我遇到最蛋疼的编码问题,各位朋友想必也被编码问题弄的蛋疼过吧。下面我们总结一下各种编码规范之间的关系。 对于编码规范,有unicode和GBK,GB2312等。unicode是现在最流行...

C++88个注意点子之71~88

71. 操作符重载: (1)不能通过连接其他符号来创建任何新操作符,如**(幂)非法 (2)不内置类型定义额外的新操作符(如不能为数组定义+) (3)重载操作符必须具有至少一个类类型或枚举类型的...

比较大数的大小(10**6) c++ python

A. Comparing Two Long Integers time limit per test 2 seconds memory limit per test 256 megabytes inp...

有点意思的C/C++问题及解答:6-10

问题 6:非C++内建型别A 和B,在哪几种情况下B 能隐式转化为A?  (1)class A { ...... };  class B : public A { ……} ;  // B 公有继承自...
  • cike211
  • cike211
  • 2013年08月15日 21:53
  • 477

有点意思的C/C++问题及解答:6-10

问题 6:非C++内建型别A 和B,在哪几种情况下B 能隐式转化为A?  (1)class A { ...... };  class B : public A { ……} ;  // B 公有继承自...

明明白白c++ effective c++ 条目6-10

废话少说,直接开题。 effective c++的下载地址http://download.csdn.net/detail/mlkiller/5335383 条款6:析构函数里对指针成员调用de...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++88个注意点子之6~10
举报原因:
原因补充:

(最多只允许输入30个字)