指针

指针的基础:

<1>定义

Code

 

      以上pa是一个指针,cout<<pa;输出的是它的地址

      而*pa是一个int值,cout<<*pa输出的是1;

<2>指针与其指向对象关联性

   由以上:

    假如我在上面分隔线上的代码中继续添加以下代码:

       *pa = 2;或 a = 2; 

        cout<<(*pa == a)<<endl;//输出1(true),证明是同时更新的;

<3> const与指针的使用(这个东西很阴的)

Code

<4> 指向指针的指针

Code

<5>内存分配(堆中)

Code

 关于指针的一些问题:

<1>指向常量的指针与分配了内存的指针

Code

:false,false,true,true

因为str1,str2,str3,str4都是字符串数组,都有分配自己的存储空间,他们的值都是指向各自的首地址,所以不等。而str5,str6不是字符数组而是常量指针,而“abc”是以常量的形式存储与静态数据区,因为相同的常量在数据区只会分配一块空间,因此str5,str6都是指向此静态区域的头地址,str7和str8同理。

<2>关于sizeof

 

Code

 

求输出:

:3(反白可以看见)

   11

使用数组作函数形参时数组指针自动退化为指针,因此在函数体内的sizeof只能求出指针的长度4;而在外的sizeof则能求出数值的整体长度,函数内的求长使用strlen,此函数所求长度不包括‘\0’,等于sizeof()-1;

改进方法是:

Code

<3>字符串数组与指针

Code

求输出:

(1)bcdefg(反白可以看见)

  (2)cdef

  (3)f

<4>关于函数中的参数指针及函数中分配内存

先说明一下;

使用new或malloc来申请空间需要改变pstr,这是重点,指针作参数是否正确使用可以说就是指针的地址值(不是其指向的类型)有没有被改变的问题,将指针看作一个数据类型,那么理解会比较容易。

看以下例子:

Code

 

 第一种方法(外部申请内存)(严格来说这种与上面讨论的无关,但是也记录下来吧):

Code

 然后在main函数中这样使用

Code

第二种方法(使用双重指针):

Code

第三种方法(使用指针的引用)

Code

<5>strlen的使用;

求字符串长度

Code

所以有如下:

Code

<6>指向数组的指针和指针数组

以下有什么不同?

Code

<7>指向类中成员的指针

Code

以上是使用指向类成员函数以及成员数据的方法,其实和普通的指向函数的指针和指向数据类型的指针原理是一样的,

不同的是需要在*号的前面加上类作用域。

 

以后找到一个关于指针的细节就补上一个,请各位也看过的也帮忙提些意见吧,让我好完善一下!谢谢。

posted @   剑鬼鬼  阅读(522)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示