c++指针只能说博大精深,在用的时候感觉好晕

1.指针类型转换

/*
在指针的强制类型转换:ptr1=(TYPE*)ptr2中,如果sizeof(ptr2的类型)大于sizeof(ptr1的类型),
那么在使用指针ptr1来访问ptr2所指向的存储区时是安全的。如果sizeof(ptr2的类型)小于sizeof(ptr1的类型),
那么在使用指针ptr1来访问ptr2所指向的存储区时是不安全的
*/
#include <iostream>
using namespace std;
void fun(char*s)
{
char c;
c=*(s+);*(s+)=*(s+);*(s+)=c;
c=*(s+);*(s+)=*(s+);*(s+)=c;
}
int main()
{
int a=;
fun((char*)&a);
cout << a;
getchar();
}

这个程序是实现整形的字节内容转换

#include <iostream>
using namespace std; struct MyStruct
{
bool b;
};
int main()
{
void* ptr = new bool;
cout << sizeof(MyStruct);
MyStruct* p = (MyStruct*)ptr;
p->b = true;
getchar();
}

对于这个例子MyStruct的大小为1,所以满足条件,只含有虚函数的类大小为4,因为有虚指针,任何指针的大小都是4,空类大小为1,这个是c++规定的,因为系统要存储这个类型,大小为0就没法存储

2.NULL指针

#include <iostream>
using namespace std; int main()
{
char* p = NULL;//空指针的值是0x00000000,NULL主要是内存删除之后赋成null,防止野指针
p = new char('a');//我也为空指针什么都不能操作,这个是给p重新分配一块内存
cout << *p << endl;
delete p;
*p = 'c';//p野指针,虽然内存删除了,但指针还是指向那个位置
p = NULL;
*p = 'b';//p是空指针,对空指针操作直接报错,所以在在指针删除之后置为NULL,防止对野指针的误操作。 getchar();
}

最新文章

  1. Hello Bugs
  2. react 调用 native 的callShareAllFunc()方法,实现分享
  3. 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目。
  4. Android Studio Gradle构建脚本
  5. 十日谈 (share)
  6. 剑指Offer40 和为s的连续正数序列
  7. windows下tomcat切割日志按照日期输出
  8. iOS开发-控件设置
  9. 递归实现生成Grey码
  10. 提取肤色信息原理及操作——opencv
  11. C++类的实例化的两种方法
  12. 转:HTML错误编号大全
  13. eclipse中集成hadoop插件
  14. js知识点记录
  15. JS中获取session中传过来的值对象
  16. postman简单教程-环境变量,全局变量的设置及作用
  17. blueprint的使用
  18. MybatisGenerator生成的mapper 少了识别主键的方法 byPrimaryKey()
  19. redis的内存优化【转】
  20. Tanya and Password CodeForces - 508D (欧拉回路)

热门文章

  1. 准备你的Adempiere开发环境(2)- 安装
  2. 【jquery的setTimeOut定时器使用】
  3. java的日期格式使用
  4. Vue Element Form表单时间验证控件使用
  5. Android USB转串口通信开发基本流程
  6. laravel配置文件(自定义配置文件)
  7. freeswitch录音功能
  8. Java编程介绍
  9. tensolrflow之基础变量
  10. CCNA2.0笔记_Trunk&amp;EtherChannel