c++ 指针
来源:互联网 发布:数组转list 编辑:程序博客网 时间:2024/06/07 06:07
1:指针声明:
char* a == char * a == char *a==char*a==char * a ;
//*操作符的空格是可选的,在哪里添加空格对于编译器来说没有任何区别。
char *a :强调a是一个char类型的值
char* a;强调char* 是一种类型,是指向char的指针。
char* a,b; 注意: sizeof(a)=8,sizeof(b)=1; a是一个指向char的指针,b是一个char类型
2:指针的危险
3:指针与数字:
(1):指针不是整形,虽然计算机通常把地址当做整数来处理,但是从概念上,指针和整数是两个截然不同的类型;
整数可以进行加减乘除等运算但是指针进行乘除运算时没有任何意义的。
(2):从指针和整数的操作层面上看他们也是彼此不同的,不能简单的把整数赋值给指针:
int * a; a=0x20000;//type mismatch 这条语句没有告诉程序,这个数字数字是一个地址:
C99标准之前,C语言允许这样,但是C++类型不允许会报错,类型不匹配。
可以进行强制类型转换操作告诉程序这个整数是一个地址即:a=(int *) 0x20000;
4: 指针真正的用武之地在于,在运行阶段分配未命名的内存以存储值。在这种情况下,可以使用指针来访问内存。
int * a=new int;
5:使用delete来释放内存:
使用delete来释放内存时能够将内存归还,但是delete仅仅释放 指向的内存,并不释放a指针本身,可以将a从新指向另外一个新分配的内存块。
new和delete一定要配对使用,否则将发生内存泄漏 memeory leak ,严重时,程序将由于不断的寻找更多内存而终止。
6:不要尝试释放已经释放的内存块,因为这样的结果将是不确定的。
只能用delete释放使用new分配的内存,不过对于空指针使用delete是安全的。
一般来说不要创建两个指针指向同一个内存块,因为这样将增加错误的删除同一个内存块两次的可能性。
7:使用new创建动态数组
int * p=new int[100] delete时要用 delete [] p;
[]告诉程序,应该释放整个数组,而不仅仅是指针指向的元素,new 时带[] delete时也要带[] new 时不带[] delete时也不带[]
8:使用new 和delete时 应遵循:
a:不要使用delete来释放不是new分配的内存
b:不要使用delete释放同一个内存块两次。
c:如果使用new[]为数组分配内存,则使用delete[]释放
d:如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放
e:对空值指针应用delete是安全的
- C指针的指针
- c 指针的指针
- C--指针
- C-指针
- C指针
- C指针
- C指针
- C---指针
- c 指针
- C指针
- C指针
- C指针
- C 指针
- c指针
- C指针
- C 指针
- C 指针
- C 指针
- AndroidStudio使用Bmob提供的云端服务实现简单注册,登录。
- adb批量操作bash脚本
- vm8.0安装mac提示中断导致虚拟cpu进入终止状态……vm重启的解决办法
- QT 窗口操作
- Oracle中针对一张表建立触发器,并且触发器也处理同一张表的数据(ora-04091 错误)
- c++ 指针
- 关于系统编码的那点事
- OpenStack QoS
- 在Window环境下多线程与CPU资源分配原则
- 关于QQ总提示已被损坏或部分文件丢失解决办法
- Android系统启动-SystemServer上篇
- 近期window7x64 打补丁之后IE11x64无法启动
- 3----编程求解一元二次方程
- [置顶]关于使用input type=file 标签上传文件的注意细节(上传文件 无法获取文件 问题)