c++指针 短命女 2022-08-23 00:34 151阅读 0赞 c++中有一种特殊的变量,他叫指针,他存储着地址。说指针之前我们说说常规变量的地址怎么获得呢?我们可以用&运算符获得例如 int a=0; int *p=&a; 注意两点一般常规变量存储的地址随系统而异,且地址一般都是十六进制表示的 # 定义指针 # 一般有两种写法定义指针 int *p int* p 第一种写法表示\*p(在定义之外用\*是对指针的解析, \*p是指 指针p中存储的地址指向的那个变量)指向的是int; 第二种是指p是一种 int\*类型的变量(c++程序员一般喜欢这种,我也听别人说的) 其实上述两种表达都一样 ,只是你怎么理解罢了。不过有一点要说明就是 对每个指针变量名都需要一个\* int *p1,p2;//p1是一个指针,但是p2是int的变量 注意 指针是危险的 int *p; *p=123; 上述代码中没有对p初始化,就直接给\*p赋值,这样的后果是我们不知道123这个值被赋值到哪里了,如果是计算机系统的核心内存,一般都禁止写入,这样程序就崩溃了 # 初始化指针 # 有两种 int *p=(int*)0xB8000000//为什么要强制转换呢?因为不强制转换的话就是把数字赋值个指针,这样是错误的 int *=new int 第一种方法不安全 除非你知道 给予的地址在计算机中是干什么的,第二种是推荐做法,让计算机替我们找一个合理的地址 # 用delete释放内存 # 如果new出来的地址不会释放的话 ,他就一直存在在哪里,而一般的操作系统会在程序退出时释放程序申请的所有内存,那怎么自己释放呢?使用delete,delete后面加上new出来的那个指针例如 int *p=new int; char *p1=new char[20];//new 初始化数组返回的是数组第一个元素地址所以赋值给char* delete p; delete []p1; 如上所述 删除不同的变量用 delete 而数组用delete \[\] 注意亮点点 我们不能删除声明变量所属的内存,也不能重复删除, int a=0; int *p=&a; delete p;//错误,不鞥删除不是通过new返回的指针,不能的原因是因为普通变量在栈中,但是是delete只能删除堆中的 delete p;;//错误,如果上一步是正确的话 这一步也是错误的,因为不能重复delete,c++标准说明了这样的结果是不确定的,没人知道会怎么样 还有删除时的类型不匹配,导致的后果是不确定的没人知道会怎么样,所以不要这样使用 int* p1=new int; int*p2=new iint[10]; delete p2; delete []p1; # 指针,数组,指针运算 # c++的数组是通过指针管理的,数组名解释为地址,是这个数组第一个元素的地址,而对数组名取地址是这个数组的地址 int a[]={0,1,2} int *p1=a; int *p2=&a; cout<<p1<<p2;//p1,p2地址值是一样的 但是p1,p2是不一样的地址,p1是int* ,而p2是int(*)[]的 指针的运算符 只能加 上和减上一个者整数例如 int a[]={1,2,3}; int *p=a; cout<<*(p++)<,endl;//输出是a[1]. 指针的+1和-1,不是地址加+1和-1,而是加上1个 这个指针指向的数据类型的字节,说的有的拗口,简单说就是如果这个指针指向的数据是int的,又如果int 是4字节,那么指针加一的话地址就会加上4。(内存中1个字节是1个地址) # 指针访问 # 和指针有关的访问就三个 一个是 \* 一个 . 是.一个是 -> 这三个符号其实很简单 第一个 就是普通的的取地址 \*p就是取p指向的那个值 第二个 就是如果有一个结构体或者类A 有一个成员a , 就A.a 第三个就是如果有一个结构体或者类但是你不知名字值知道指针p, 有一个成员a 这是你就可以p->a 最后告诉你们就是p->a等于(\*P).a # const和指针 # const的修饰的指针表示不可以通过指针修改变量 而变量本身在非const的情况下是可以修改的 ![Center][] 上图简单总结了一下 其实非const的指针在强制转换下时刻以指向const 的变量的(const\_cast来强制转换) 还有一种很有趣的事 const int const *p;//这修饰了一个指针 这个指针是const的 它指向的是一个int 这个int也不可以通过这个指针来修改 # 函数指针 # 函数名就是函数的地址 a1(b);//a1函数形参是b函数的地址 a2(b());//a2的形参是b函数的返回值 声明函数指针 int a(int); int (*p)(int);一定要加括号不然就int *(p(int)),意味着pf()是一个返回指针的函数 使用指针调用函数 p()//一种学派认为指向函数的指针应该和函数名相似, (*p)();//另一种学派认为因为p是函数指针所以*p是函数 c++这种了这两种方法都可以 [Center]: /images/20220722/c7a24653036142c19ddaca7f34b008a7.png
相关 C-指针 指针 int i=1; int p=&i; 画出内存的图就是如下 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5na 小灰灰/ 2022年12月12日 15:21/ 0 赞/ 6 阅读
相关 C++指针 指针的含义 1. 指针其实就是地址,指针存在变量里叫指针变量; 2. 指针的大小一般是4或者8,分别对应32位和64位系统; 看一段代码加深理解: int 素颜马尾好姑娘i/ 2022年10月06日 15:56/ 0 赞/ 159 阅读
相关 C++指针 第7章指针 1.教学内容 (1)指针与指针变量的概念,指针变量的定义、赋值与引用,指针变量的运算。 (2)数组指针与数组指针变量的概念,一维数组元素地址的三种表示 骑猪看日落/ 2022年09月18日 04:59/ 0 赞/ 144 阅读
相关 C++ 指针 * 内存地址 每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。 实例 什么是内存地址以及如何访问它。 ゞ 浴缸里的玫瑰/ 2022年09月07日 05:59/ 0 赞/ 142 阅读
相关 c++指针 c++中有一种特殊的变量,他叫指针,他存储着地址。说指针之前我们说说常规变量的地址怎么获得呢?我们可以用&运算符获得例如 int a=0; int p=&a; 短命女/ 2022年08月23日 00:34/ 0 赞/ 152 阅读
相关 c++ 指针 typedef char \pstring; const pstring cstr = 0; cstr是指向char的 常量指针 const pstring \ps; 柔情只为你懂/ 2022年08月03日 08:41/ 0 赞/ 148 阅读
相关 c++指针 理解指针 -------------------- (1)指针的类型 (2)指针指向的类型 (3)指针的值 (4)指针本身所占的内存区 指针的类型 我会带着你远行/ 2022年07月17日 00:41/ 0 赞/ 167 阅读
相关 C/C++指向指针的指针 我在一篇教程中看到下面这段,它描述指向指针的指针是如何运作的。 引用文章相关段落如下: int i = 5, j = 6, k = 7; int ip1 = 古城微笑少年丶/ 2022年07月14日 05:20/ 0 赞/ 179 阅读
相关 C指针 第一章 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的 四方面 的内容: 指针的类型,指针所指向的 电玩女神/ 2022年06月17日 04:36/ 0 赞/ 155 阅读
相关 c++指针 \--------侵删-------- https://www.runoob.com/cplusplus/cpp-pointers.html Null 指针 在变量 忘是亡心i/ 2021年11月05日 09:10/ 0 赞/ 284 阅读
还没有评论,来说两句吧...