C++ 指针知识点整理
来源:互联网 发布:中国移动优化工作 编辑:程序博客网 时间:2024/05/24 00:46
学习C++指针部分的知识必须先了解两个符号的含义
a." * ",叫做解析运算符或者解除引用运算符,功能:找到该地址处的值。
(C++指针使用铁律:在用解除运算符 * 之前,必须初始化一个确定、适当的地址,否则可能会出现难以寻找的bug。
例子:long* a;*a=1;这是错的,a的值未确定)
b." & ",叫做地址运算符,功能:获取该变量的地址
两者功能恰好相反。
(注:&不能用于取符号常量 define 和字面常量的地址,符号常量和立即数都没有地址,常量在预处理时就已经展开成符号标识,是不占用空间的。所占用空间的都是变量。const类型的常量,其不是真正意义上的常量。其只是一个只读的变量。这样就意味着其是占用空间的,所以你使用取地址符还是能够取到其地址的。)
1.声明和初始化指针
#include <iostream>using namespace std;int main(){int a=1;int* p=&a;int** q=&p;cout<<q<<endl;cout<<*q<<endl;cout<<**q<<endl;int b[3];int (*p)[3]=&b;return 0;}
2.指针、数组和指针算数
#include <iostream>using namespace std;int main(){short a[3]={1,2,3};short* pa=a;//int* pa=&a[0];这两句代码含义一样cout<<*(a+1)<<endl;//数组名当做指针用 相当于 a[1]cout<<pa[1]<<endl;//指针当做数组用 *(pa+1)cout<<sizeof a<<endl;//求a数组的占内存大小cout<<sizeof pa<<endl;//求指针pa占内存的大小return 0;}
3.指针和字符串
#include <iostream>using namespace std;int main(){int a[3]={1,2,3};char b[3]="cd";//C风格代码 也可以char* b="cd"; 第二种方法无元素个数的限制cout<<a<<endl;//显示地址cout<<b<<endl;//显示字符串 cout<<(int*)b<<endl;//强制转换成另一种指针类型,才能显示地址return 0;}
上面说了数组名可以看成指针,为什么输出a是地址而输出b是字符串呢,原因如下:
一般来说,如果给cout提供一个指针,将打印它的地址。但如果指针类型是char*,cout将显示指向的字符串,从该处开始打印字符,直到遇到空字符为止"\0"。如果要显示地址,必须强制类型转换成另一种指针类型如 int*。
那cout<<"cd";该如何理解呢? 引号括起来的字符串像数组名一样,也是第一个元素的地址。
4.C++管理数据内存的方式以及new和delete的使用
C++三种管理数据内存方式:
a.自动存储(存储在栈中)
代码块中(函数内)定义的常规变量使用自有存储空间,被称为自动变量。它是一个局部变量,作用域为代码块(函数内)。代码块(函数)调用时产生,结束时消亡。
这时候new 和 delete 的好处就体现出来了,new和delete对内存有很大的控制权,能方便的控制内存何时释放。
b.静态存储
是整个程序执行期间都存在的执行方式。两种声明方式第一种,定义在函数外。第二种,声明变量时前面加上 static: static int a=1;
c.动态存储
new 和 delete提供了更加灵活的方法,它们管理了一个内存池叫自由存储空间(free store)或堆(heap)。
优点:new和delete对内存有很大的控制权,能方便的控制内存何时释放。
缺点:占用自由存储区域不连续,这使得新分陪内存的位置跟困难,效率降低。
new 和 delete的使用规则 :
1.new 和 delete 要配对使用,delete不能重复释放,更不能释放不是用new分配的内存。
2.如果指针用new分配好内存则不能在用delete释放前对其进行更改,否则导致内存泄露。
int* p=new int;
p=&a; //对p进行了更改,将找不到原来分配的内存
3.若为申请动态数组则如下
int* a=new int[3];
delete []a;
4.如果指向的对象是结构,则可以用指针解除应用运算符来(->)访问其成员。
5.对空指针应用delete是安全的
小编水平有限难免有些错误,如果发现尽快与我联系。QQ2415180498
- C++ 指针知识点整理
- C++指针知识点整理
- C语音知识点整理
- C语言知识点整理
- [C++]指针知识点小结
- C 指针 基础知识点
- C语言指针知识点
- c/c++易错知识点整理3(引用和指针)(一)
- C和指针 整理
- C语言基础知识点整理
- c语言知识点问答整理
- C语言指针相关知识点
- C/C++指针知识点汇总
- 程序员笔试知识点整理(C/C++)
- 程序员笔试知识点整理(C/C++)
- C和指针整理 2
- (整理)C/C++野指针
- 《C和指针》整理一
- 黑马程序员 Java基础——网络编程
- 谷歌给应届生的8条建议
- 集合(关于Map)
- Android系统权限和root权限
- byte中bit解析
- C++ 指针知识点整理
- 7克砝码和2克砝码分盐问题 自创总结
- 我的生活怎么了?
- PHP array
- iOS开发小技巧[001]:点击状态栏回到列表头部
- [分享]Asterisk 实现模拟彩铃形式呼叫
- Java使用Protocol Buffers入门四步骤
- __gxx_personality_v0详解
- Unable to start activity ComponentInfo{com.example.activity02/com.example.activity02.otheractivity}: