回顾二维数组——数组指针部分

devtools/2024/11/16 20:01:48/

数组指针才真正等同于二维数组名  

 

数组指针:

 当运行下面的代码的时候,会有警告,偏移量不同,arr++偏移的是整行数组,与注释的p++不同,如果p=&arr[0][0],p++表示的就是依次、连续的12个元素地址,偏移一个整型变量;因为数组元素是连续的地址空间,结果就会从arr[0][0]开始输出完整的12个数据,换成p=arr,arr++ 就会发出警告;解决的方法就是:运用数组指针,这样就与p++的情况相通了

直接运行,虽然能得到结果但是会有警告;如下

#include <stdio.h>
int main()
{/*数组指针的应用 */int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; //12个元素是连续的int i,j;int *p;// p=&arr[0][0];p=arr;//能不能定义一个指针,让指针偏移的时候,也偏移对应大小的数组?//数组指针,定义一个指针,指向一个数组for ( i = 0; i < 3; i++){for (j = 0; j < 4; j++){//  printf("%p\n",arr[i]+j);printf("%p\n",*p++);//第i行第j列元素的地址}}
}​//输出有警告
warning: assignment to 'int *' from incompatible pointer type 'int (*)[4]' [-Wincompatible-pointer-types]p=arr;^

 添加数组指针后:

#include <stdio.h>
int main()
{/*数组指针的应用 */int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; //12个元素是连续的int i,j;//int *p;// p=&arr[0][0];int (*p2)[4];p2=arr;//能不能定义一个指针,让指针偏移的时候,也偏移对应大小的数组?//数组指针,定义一个指针,指向一个数组for ( i = 0; i < 3; i++){for (j = 0; j < 4; j++){//  printf("%p\n",arr[i]+j);printf("%p\n",*(arr+i)+j);//第i行第j列元素的地址}}
}
//成功输出元素的地址
000000000061FDE0
000000000061FDE4
000000000061FDE8
000000000061FDEC
000000000061FDF0
000000000061FDF4
000000000061FDF8
000000000061FDFC
000000000061FE00
000000000061FE04
000000000061FE08
000000000061FE0C

 发现问题:发现p2与++p2的地址输出结果相同。分析:printf是从右往左开始输出打印的,先进行++p2后再p2,暂时先分开写

#include <stdio.h>
int main()
{/*数组指针的应用 */int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; //12个元素是连续的int i,j;int *p;// p=&arr[0][0];int (*p2)[4]; //p2相当于一个一维数组了呀,p2=arr;//能不能定义一个指针,让指针偏移的时候,也偏移对应大小的数组?//数组指针,定义一个指针,指向一个数组printf("p2:%p,p2++=%p\n",p2,++p2);for ( i = 0; i < 3; i++){for (j = 0; j < 4; j++){//  printf("%p\n",arr[i]+j);// printf("%d\n",(*(arr+i)+j));//第i行第j列元素的地址}}
}
p2:000000000061FDF0,p2++=000000000061FDF0   //发现p2与++p2的地址输出结果相同
#include <stdio.h>
int main()
{/*数组指针的应用 */int arr[3][4] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; //12个元素是连续的int i,j;int *p;// p=&arr[0][0];int (*p2)[4]; //p2相当于一个一维数组了呀,p2包含4个元素的数组指针p2=arr;//能不能定义一个指针,让指针偏移的时候,也偏移对应大小的数组?//数组指针,定义一个指针,指向一个数组printf("p2:  %p\n",p2);printf("++p2:%p\n",++p2);for ( i = 0; i < 3; i++){for (j = 0; j < 4; j++){//  printf("%p\n",arr[i]+j);// printf("%d\n",(*(arr+i)+j));//第i行第j列元素的地址}}
}
p2:  000000000061FDE0
++p2:000000000061FDF0      //变了16,因为一行数组有四个元素

 //能不能定义一个指针,让指针偏移的时候,也偏移对应大小的数组?
 //数组指针,定义一个指针,指向一个数组
 //数组指针才真正等同于二维数组名 

#include <stdio.h>
int main()
{/*数组指针的应用 */int arr[3][5] = {{11,22,33,44},{12,13,15,16},{22,66,77,88}}; //12个元素是连续的int i,j;int *p;// p=&arr[0][0];int (*p2)[5]; //p2相当于一个一维数组了呀,p2包含4个元素的数组指针p2=arr;//能不能定义一个指针,让指针偏移的时候,也偏移对应大小的数组?//数组指针,定义一个指针,指向一个数组//数组指针才真正等同于二维数组名printf("p2:  %p\n",p2);printf("++p2:%p\n",++p2);for ( i = 0; i < 3; i++){for (j = 0; j < 4; j++){//  printf("%p\n",arr[i]+j);// printf("%d\n",(*(arr+i)+j));//第i行第j列元素的地址}}
}


http://www.ppmy.cn/devtools/134507.html

相关文章

django入门【05】模型介绍(二)——字段选项

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结&#xff1a; 2、choices**choices 在 Django 中有以下几种形式&#xff1a;**&#xff08;1&#xff09; **简单的列表或元组形式**&#xff08;2&#xff09; **字典映射形式**&#xff08;3&#…

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (三)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 &#xff08;三&#xff09; 一、前言 目前鸿蒙最新系统&#xff0c;经过测试还有两个BLE相关Bug正在修复&#xff1a; 1.获取本地设备蓝牙名称&#xff0c;会为空&#xff0c;只有点击到设置蓝牙中查看后&#xff0c;该接口才能…

路由器基本原理与配置

一 &#xff0c; 路由是什么&#xff1f; 从源主机到目标主机的转发过程&#xff1b; 二 &#xff0c; 路由器 &#xff08;1&#xff09;路由器的工作原理 路由器是一种三层设备&#xff0c;是使用IP地址寻址&#xff0c;实现从源IP到达目标IP地址的端到端的服务&#xff0c…

Emacs进阶之插入时间信息(一百六十三)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

通过wsl配置Qt的中文开发环境

本文列举了一些在WSL上配置Qt编译环境中遇到的一些问题及解决方案 关键词: Win10 22HUbuntu18.04xfce桌面交叉编译arm64qt / qtcreator中文输入及显示标题 安装qt,qtcreatorqt.qpa.screen: QXcbConnection: Could not connect to displayld: cannot find -lGLqmake: could no…

mongoDB的安装及使用

文章目录 1、mongoDB的简介2、mongoDB的安装及配置3、node.js项目中mongoDB使用3.1.引入库3.2.数据操作增删改 4、mongoDB的查询4.1.查询4.2.高级查询 1、mongoDB的简介 MongoDB是一个流行的开源文档型数据库&#xff0c;它使用类似 JSON 的文档模型存储数据&#xff0c;这使得…

基于微信小程序的平安驾校预约平台的设计与实现(源码+LW++远程调试+代码讲解等)

摘 要 互联网发展至今&#xff0c;广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#xff0c;劳动强度大&#xff0c;费时费力…

Tidb数据恢复

表删除delete删除恢复(误删除) 指定时间查询 恢复 #恢复数据 #查看安全点 select * from mysql.tidb where variable_nametikv_gc_safe_point; #安全时间 select * from mysql.tidb where variable_name tikv_gc_life_time; #避免操作过慢 延长安全时间 update mysql.tidb set …