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

62.指针和二维数组(2)

一.指针和二维数组

1.如a是一个二维数组,则数组中的第i行可以看作是一个一维数组,这个一维数组的数组名是a[i]。

2.a[i]代表二维数组中第i行的首个元素的地址,即a[i][0]的地址。

二.进一步思考

二维数组可以看作是数组的数组,本质还是一维数组。所以我们可以把二维数组的一行看作是一个数组元素,此时二维数组就会变成一个一维数组。如下图所示

此时,二维数组a[2][2]变成了只有俩个元素a[0]和a[1]的一维数组。因为在一维数组中p=&a[0]可以简写成p=a;

所以由此得出:

数组名a就是一维数组元素a[0]的地址,即二维数组a中第0行的地址。a+1则是二维数组a中第1行的地址。所以a+i则是二维数组a中第i行的地址。

结论:

a+i与a[i]的地址相同的。

这里需要注意的是:*(a+i)+j才是a[i][j]的地址。并不是(a+i)+j是a[i][j]的地址。

因为a+i表示的是二维数组中第i行的地址,而不是第i行首个元素的地址,此时a+i表示的是整个第i行数组,*a+i表示的才是第i行数组中首个元素的地址。也就是说虽然a和*a的值相同,但是表示的意义不同。

举例验证:

#include <stdio.h>int main(void)
{int a[2][2]={0,1,2,3};int i = 0;int j = 0;for(i=0;i<2;i++){for(j=0;j<2;j++){printf("a[%d][%d] addr is %p,value is %d\n",i,j,a[i]+j,*(a[i]+j));}}printf("**********************************\n");for(i=0;i<2;i++){for(j=0;j<2;j++){printf("a[%d][%d] addr is %p,value is %d\n",i,j,*(a+i)+j,*(*(a+i)+j));}}printf("%p\n",*a);printf("%p\n",*a+1);printf("%p\n",a);printf("%p\n",a+1);return 0;}

运行结果:

三.视频教程

62.指针和二维数组(2)_哔哩哔哩_bilibili

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

相关文章:

  • 学生表的DDL和DML
  • 视觉灵感的探索和分享平台
  • 使用 Reqable 在 MuMu 模拟器进行App抓包(https)
  • RedisConnectionException: Unable to connect to localhost/<unresolved>:6379
  • poi word写入图片
  • 【监控】2.Grafana的安装
  • Java入门教程(上)
  • 【Linux】Linux下使用套接字进行网络编程
  • 强化学习-Q-learning、SARSA和PPO等算法
  • HarmonyOS SDK助力鸿蒙原生应用“易感知、易理解、易操作”
  • Java基础入门day72
  • 文本编辑命令和正则表达式
  • 云手机群控功能讲解
  • gdb用法
  • 聊一聊UDF/UDTF/UDAF是什么,开发要点及如何使用?
  • 配置Nginx二级域名
  • LeetCode——判断回文数
  • shell:使用结构化语句(for、while循环)
  • 数据结构_绪论
  • AI自动生成角色和情节连续的漫画,中山大学联想提出AutoStudio,可以多轮交互式连续生成并保持主题一致性。
  • 【经典面试题】RabbitMQ如何防止重复消费?
  • 如何自己录制教学视频?零基础也能上手
  • 【android】用 ExpandableListView 来实现 TreeView树形菜单视图
  • 策略模式与函数式编程应用
  • docker原理记录C-N-A
  • 【LeetCode】每日一题:二叉树的层次遍历
  • 单体架构改造为微服务架构之痛点解析
  • 马面裙的故事:汉服如何通过直播电商实现产业跃迁
  • SaaS产品运营:维护四个不同类型的合作伙伴的实战指南
  • 【监控】3.配置 Grafana 以使用 Prometheus 数据源