C++菜鸟常见错误整理(第七天)

 本人目前还是学生,能力有限,有不足或者错误的地方欢迎大家指正,谢谢大家!

1、指针

    int a(5);   int *pa=&a; 等同于int  a(5);int *p;   p=&a;

    *有两个含义:在定义时,*表示定义的变量为指针变量(可以看作是一种类型),如:int *p;表示p是一个指针。在执行中*是运算符(访址运算)*p表示访问p内容所指向的内存单

元。如有int *pa,则我们有三个值可以使用:pa为变量pa的内容(其值是一个地址,&a),&pa为变量pa的地址,*pa为pa所指向的内容(即为变量a的值5)。

2、释放内存 

    动态创建的对象用完后,应该释放内存,delete pi;该命令释放 pi 指向的 int 型对象所占用的内存空间。

如果指针指向不是用 new 分配的内存地址,则在该指针上使用delete 是不合法的。

如果指针的值为 0,则在其上做 delete 操作是合法的,但这样做没有任何意义: int *ip = 0; delete ip;

3、悬垂指针

删除指针后,该指针变成悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。悬垂指针往往导致程序错误,而且很难检测出来。

一旦删除了指针所指向的对象,立即将指针置为 0,这样就非常清楚地表明指针不再指向任何对象。

4、删除 const 对象

      尽管程序员不能改变 const 对象的值,但可撤销对象本身。如同其他动态对象一样, const 动态对象也是使用删除指针来释放的:

delete pci; // ok: deletes a const object

即使 delete 表达式的操作数是指向 int 型 const 对象的指针,该语句同样有效地回收 pci 所指向的内容。

5、隐式类型转换

     编译器在必要时将类型转换规则应用到内置类型和类类型的对象上。在下列情况下,将发生隐式类型转换:

 a   在混合类型的表达式中,其操作数被转换为相同的类型:

    int ival;

    double dval;

    ival >= dval // ival converted to double

b   用作条件的表达式被转换为 bool 类型:
    int ival;

   if (ival) // ival converted to bool

   while (cin) // cin converted to bool
c  操作符

     条件操作符(?:)中的第一个操作数以及逻辑非(!)、逻辑与(&&)和逻辑或(||)的操作数都是条件表达式。出现在 if、while、for 和 do while 语句中的同样也是

条件表达式。

d  可将算术对象转换为bool类型,bool对象也可以转换为int型。如bool b=true;  int a=b;//a=1        int a=1;if(a){....}//a=true

e  用一表达式初始化某个变量,或将一表达式赋值给某个变量,则该表达式被转换为该变量的类型。

6、指针转换

    在使用数组时,大多数情况下数组都会自动转换为指向第一个元素的指针:

    int ia[10]; // array of 10 ints

    int* ip = ia; // convert ia to pointer to first element

不将数组转换为指针的例外情况有:数组用作取地址(&)操作符的操作数或 sizeof 操作符的操作数时,或用数组对数组的引用进行初始化时,不会将数组转换为指针。

我们将在第 7.2.4 节学习如何定义指向数组的引用(或指针)。C++ 还提供了另外两种指针转换:指向任意数据类型的指针都可转换为 void* 类型;整型数值常量 0 可

转换为任意指针类型。 

7、命名的强制类型转换符号的一般形式如下:

cast-name<type>(expression);

其中 cast-name 为 static_cast、dynamic_cast、const_cast 和reinterpret_cast 之一,type 为转换的目标类型,而 expression 则是被强制转换的值。

强制转换的类型指定了在 expression 上执行某种特定类型的转换。

今天就到这里,有不足的地方还请指正,谢谢大家!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值