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

数组指针和指针的区别

区分数组指针和指针数组

int *p[3]和 int (*p)[3]

根据运算符的优先级,"[]"的优先级是高于“*”的,p就会先与[]结合,那么它本质就是数组,数组内存放的是指针,它叫指针数组。(int*p[3])。

因为括号优先级较高,p就先和“*”结合,那么它本质上就是指针,叫数组指针,存放的是数组的地址。既然本质是指针,那么它在32位系统里始终占4个字节,就是单纯的一个数组的地址。

(int(*p)[3])。

数组指针

数组指针是一个指向数组的指针。它可以用来访问整个数组,尤其是当我们希望传递数组到函数时。

定义

int arr[5] = {1, 2, 3, 4, 5};  
int (*ptr)[5] = &arr;  // ptr是指向一个包含5个整数的数组的指针

使用方法

#include <iostream>  void printArray(int (*p)[5]) {  // 参数是指向一个包含5个整数的数组的指针  for (int i = 0; i < 5; ++i) {  std::cout << (*p)[i] << " ";  // 通过解引用访问数组元素  }  std::cout << std::endl;  
}  int main() {  int arr[5] = {1, 2, 3, 4, 5};  printArray(&arr);  // 传递数组的地址  return 0;  
}

数组指针也称行指针,也就是说,当指针p执行p+1时,指针会指向数组的下一行,

如: 

int a[3][4];
int (*p)[4];	//p是一个数组指针,指向了一个包含4个int型元素的数组
p=a;			//将二维数组的首地址赋给p,即a[0]或a[0][0]
p++;			//跨过第一行,p指向了a[1][0]

指针数组

指针数组是一个数组,其中每个元素都是一个指针。它可以用来存储多个指针,这些指针可以指向不同的数据类型或对象

定义

int* ptrs[5];  // ptrs是一个包含5个指向整数的指针的数组

使用方法

#include <iostream>  int main() {  int a = 10, b = 20, c = 30;  int* ptrs[3];  // 指针数组  ptrs[0] = &a;  // 指针指向不同的变量  ptrs[1] = &b;  ptrs[2] = &c;  for (int i = 0; i < 3; ++i) {  std::cout << *ptrs[i] << " ";  // 解引用指针数组访问值  }  std::cout << std::endl;  return 0;  
}

指针数组是一个包含若干个指针的数组,p是数组名,当执行p+1时,则p会指向数组中的下一个元素。

如:

int a[3][4];
int *p[3];		//定义了一个数组,该数组中有3个int*指针变量,分别为p[0]、p[1]、p[2]
//p++;			//若执行此语句,则数组p指向下一个数组元素
for(int i=0;i<3;i++){p[i]=a[i];	//数组p中有3个指针,分别指向二维数组a的每一行
}

总结

数组指针是指向数组的指针,通常用于处理数组作为一个整体,特别是在函数参数中传递整个数组。

指针数组是由指针组成的数组,它可以存储多个独立的指针,可以指向不同的内存位置。

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

相关文章:

  • Linux git-bash配置
  • 【后端速成Vue】computed计算属性
  • 力扣-每日温度
  • (Go语言)初上手Go?本篇文章帮拿捏Go的数据类型!
  • 支付宝域名如何加入白名单(扫码老是弹窗)
  • 嵌入式学习第21天Linux基础
  • 【activiti工作流源码集成】springboot+activiti+mysql+vue+redis工作流审批流集成整合业务绑定表单流程图会签驳回
  • 华为私有接口类型hybrid
  • 计算机的错误计算(一百五十)
  • 【模块化大作战】Webpack如何搞定CommonJS与ES6混战(3)
  • 工程认证与Spring Boot:计算机课程管理的新探索
  • vue3的自定义hooks怎么写?
  • SpringBoot项目编译报错 类文件具有错误的版本 61.0, 应为 52.0
  • 【网络】应用层——HTTP协议
  • ServletContext介绍
  • 让AI帮我用java实现EasyExel读取图片—支持WPS嵌入图片
  • C# 实现对指定句柄的窗口进行键盘输入的实现
  • 深度学习之卷积问题
  • yum安装zabbix5.0升级php到74的办法
  • JavaWeb合集23-文件上传
  • 当AI遇上时尚:未来的衣橱会由机器人来打理吗?
  • 【初阶数据结构篇】二叉树OJ题
  • Windows系统中Oracle VM VirtualBox的安装
  • go语言使用总结(持续更新)
  • 如何在Android中自定义property
  • 机器学习5_支持向量机_原问题和对偶问题——MOOC
  • 索引的细节
  • LeetCode 540.有序数组中的单一元素
  • 【图文】【DIY便签】如何自行编译OPENCV使用动态库
  • WordPress文章自动提交Bing搜索引擎:PHP推送脚本教程