当前位置: 首页 > news >正文

c语言指针详解2

c语言指针详解2

1.数组名理解

数组名其实是地址,是数组首元素的地址(详解1有提及)

我们可以根据打印来确认

我们发现数组名和数组⾸元素的地址打印出的结果⼀模⼀样,数组名就是数组⾸元素(第⼀个元素)的地址。

但是上述结论有特例,如下面代码

按照上面的结论,arr为首元素的地址,那么sizeof输出的应该是4才对

其实数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外:

• sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,

单位是字节

• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素

的地址是有区别的)

除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。

1.1&arr和arr

对于数组,还有&arr这一种写法,我们同样进行打印判断=

这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和arr都是⾸元素的地址,+1就是跳过⼀个元素。

但是&arr和&arr+1相差40个字节,这就是因为&arr是数组的地址,+1操作是跳过整个数组的。到这⾥⼤家应该搞清楚数组名的意义了吧。

数组名是数组⾸元素的地址,但是有2个例外。

2. 使⽤指针访问数组

有了前⾯知识的⽀持,再结合数组的特点,我们就可以很⽅便的使⽤指针访问数组了。

同时因为arr和p是等价的,我们使用p[i]也是可以的

将*(p+i)换成p[i]也是能够正常打印的,所以本质上p[i]是等价于*(p+i)。同理arr[i]应该等价于*(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的。

3. ⼀维数组传参的本质

数组我们学过了,之前也讲了,数组是可以传递给函数的,这个⼩节我们讨论⼀下数组传参的本质。

在数组传参的时候,传递的是数组名,也就是说本质上数组传参传递的是数组⾸元素的地址。

所以函数形参的部分理论上应该使⽤指针变量来接收⾸元素的地址。那么在函数内部我们写

sizeof(arr) 计算的是⼀个地址的⼤⼩(单位字节)⽽不是数组的⼤⼩(单位字节)。正是因为函数的参数部分是本质是指针,所以在函数内部是没办法求的数组元素个数的。

4. 冒泡排序(指针传参的运用)

冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较。

5. ⼆级指针

指针变量也是变量,那么指针变量的地址存放在哪

答案就是二级指针

对于⼆级指针的运算有:

• *ppa 通过对ppa中的地址进⾏解引⽤,这样找到的是 pa , *ppa 其实访问的就是 pa .

• **ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作: *pa ,那找到的是 a .

6. 指针数组

指针数组就是存放指针的数组

指针数组的每个元素是地址,⼜可以指向⼀块区域。

7. 指针数组模拟⼆维数组

parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。

上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。

http://www.lryc.cn/news/467834.html

相关文章:

  • Chrome DevTools 二: Performance 性能面板
  • 渠道推广如何识别与防止虚假流量?
  • Keil C51 9.61__官网“最新版“下载、安装及相关提示( 保姆级教程, 安装过程详解, 附安装包 )
  • 二进制搭建 Kubernetes v1.20
  • 我希望,你把篮球和鸡联系起来想一想。。。
  • STM32 ADC介绍
  • JavaWeb合集12-Redis
  • 【C++】在Windows中使用Boost库——实现TCP、UDP通信
  • 怎么提取pdf的某一页?批量提取pdf的某一页的简单方法
  • Github优质项目推荐(第八期)
  • 快读快写模板
  • make_blobs函数
  • 特斯拉Optimus:展望智能生活新篇章
  • 基于Leaflet和SpringBoot的全球国家综合检索WebGIS可视化
  • 【Linux】/usr/share目录
  • Java中如何应用序列化 serialVersionUID 版本号呢?
  • 面部识别技术:AI 如何识别人脸
  • 全面解析文档对象模型(DOM)及其操作(DOM的概念与结构、操作DOM节点、描述DOM树的形成过程、用DOMParser解析字符串为DOM对象)
  • 字符串使用方法:
  • 想让前后端交互更轻松?alovajs了解一下?
  • E/MicroMsg.SDK.WXMediaMessage:checkArgs fail,thumbData is invalid 图片资源太大导致分享失败
  • No.21 笔记 | WEB安全 - 任意文件绕过详解 part 3
  • 咸鱼自动发货 免费无需授权
  • Netty核心组件
  • Windows中如何安装SSH
  • 在linux上部署ollama+open-webu,且局域网访问教程
  • 基于大模型的招聘智能体:从创意到MVP
  • STM32F1+HAL库+FreeTOTS学习19——软件定时器
  • @RequestBody的详解和使用
  • VMware介绍及常见使用方法