昨天写了关于一级指针的见解,即二级数组的用法和二级指针差不多,关于数组指针和指针数组这两个是不同的概念,这一点我们一定要清楚;

  数组指针我们可以理解为指向数组的指针,就是一个指针;

  指针数组则可以理解为数组里存的是指针,即每个储存空间上储存的是指针变量;这里储存了多个指针

  一个数组可以这样定义 char a[3];分配了3个字节的内存

  二维数组可以这样定义 char b[3][3];分配了3*3 即9个字节的内存

  我们知道一维数组和一级指针的用法差不多,那么二级指针有和二级指针有什么关系呢?

{

  char a[3][3];定义一个二维数组

  //二维数组我们可以理解为它是由一维数组组成,比如这个二维数组可以看成是由三个一维数组构成,而每个一维数组里分配了三个字节的空间

  //每个一维数组都分配了一个头地址a[0]是第一个数组的地址,a[1]是第二个a[2]是第三个,下标是从0开始的;

  int i = 0;

  char b[3];//定义一个一维数组

  char *c;//定义一个一级指针

  //我们知道可以直接将数组的头地址直接赋给一级指针,那么我们可不可以也将二维数组的头地址赋给一个指针呢?于是便有了数组指针,即指向数组的指针

  char *d[3];//定义一个数组指针,指针指向的空间只有3个字节,这是一个二级指针

  c = b;//将指针指向一维数组

  d = a;//将数组指针指向二维数组

  printf("%d\n",sizeof(*d));//算出b所指向空间所分配的内存大小即3和数组指针的分配有关,如char *d[5] 则为5

  //我们可以通过指针往数组里copy数据

  for(i = 0 ; i  < 3 ; i++)

  {

    strcpy((b+i),"aa");

  }

//通过指针来

  for(i = 0 ; i < 3; i++)

  {

    printf("%s\n",(b+i));//b+i 每次会向后移动三个字节

  } 

//通过数组来

for(i = 0 ; i < 3; i++)

  {

    printf("%s\n",a[i]);//a[i] 每次会向后移动三个字节

  } 

  

}

  写到这里我想大家应该可以明白二维数组是可以用二级指针来表示的;当然这里我们还是不明白为什么二维数组可以和二级指针的用法 一样,这一点我们以后再说,总之现在我们可以了解二维数组可以像二级指针一样使用,它们的用法是差不多的;

转载于:https://www.cnblogs.com/huhaihao/p/7599279.html

二维数组和二级指针关系浅析相关推荐

  1. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  2. 【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )

    文章目录 前言 一.指针数组 二.二维数组 三.自定义二维指针内存 前言 绘制如下 333 种二级指针的内存模型 : // I. 指针数组 char *p1 []= {"12", ...

  3. 二维数组与二级指针是好朋友吗?

    抛出问题 有一个二维数组,我想把它传给一个函数.于是我把函数接口定义出来了,如下: int array[2][3] = {1,2,3,4,5,6}; void fun(int **array) {ar ...

  4. 【C++】二维数组的行指针和列指针

    在C++中,数组与指针有密切的关系.任何通过数组和下标实现的表达式可等价地通过指针和偏移量实现.下面首先介绍一维数组与指针的关系,之后介绍二维数组的行指针和列指针. 1.一维数组和指针 定义一个长度为 ...

  5. 二维数组与指向指针的指针

    二维数组与指向指针的指针: 以前一直有种误解: 二维数组的是数组的数组,所以数组的首地址是指向第一个元素指针,而这个元素又是一个数组,所以把数组首地址理解为指向指针的指针. #include<s ...

  6. Linux C编程---指针数组简析(二维数组、多级指针)

    讲到指针和数组,先给大家看一道例题: 题目:填空练习(指向指针的指针) 1.程序分析: 2.程序源代码: main() { char *s[]={"man","woman ...

  7. 【HDU】1305 Immediate Decodability(字典树:结构体数组,二维数组,链表/指针)

    一.用的二维数组 #include <iostream> #include <cstring> #include <algorithm> using namespa ...

  8. char二维数组_C语言指针与数组详解

    指针与数组 指针可以与变量结合,也可以与数组结合使用.指针数组和数组指针是两个截然不同的概念,指针数组是一种数组,该数组存放的是一组变量的地址.数组指针是一个指针,表示该指针是指向数组的指针. 1.指 ...

  9. 二维数组数和指针操作的理解

    #include<string.h> #include <stdio.h> int main(void) {int a[4][2] = { { 2,4 },{ 6,8 },{ ...

最新文章

  1. 江苏省三级偏软考试大纲
  2. ArcMap上发布地图服务前,“将图形转为要素的选项”时报“输出名称无效”错误...
  3. ios调用restful接口_Postman调用https异常解决
  4. mysql 用户已设置密码,但登录可以不填密码
  5. 【Java】浅析神奇的this
  6. python添加lxml库_Python lxml库简介
  7. 带你重新认识ZooKeeper!java数组合并去重
  8. 查询某字段不重复记录的SQL语句
  9. reids高可用(灾难备份-持久化)
  10. Android学习之Activity生命周期
  11. (转)用Javascript获取页面元素的位置
  12. 传智播客管家婆java答案_传智播客 Java基础入门习题谜底
  13. python模板匹配_python实现模板匹配
  14. 突然发现浏览器广告拦截插件原理
  15. 9月20日科技资讯|余承东硬刚 iPhone11;苹果推送正式版 iOS 13;php-nsq 3.4.3 线上稳定版发布
  16. 新发的日常小实验——Ubuntu安装拼音输入法
  17. C语言lseek()函数和 fseek()函数 rewind函数
  18. SQL Server数据库-存储过程(第一讲)
  19. 2022年下半年软考所有科目详情表
  20. C语言知识-零零散散(一)

热门文章

  1. Node.js项目实践:构建可扩展的Web应用
  2. SQL点滴5—产生时间demention,主要是时间转换
  3. 玩转Regsvr32命令
  4. Windows 2000、XP、XP+进程名描述
  5. 2016年,你该如何在 Facebook 上做营销?
  6. qt android 开发之wifi开发篇
  7. 敏捷开发中Scrum方法
  8. 愿...统一沟通...易行天下!
  9. shell中数值比较 字符串比较 文件判断 whle和for和until循环
  10. 自然语言处理工具hanlp自定义词汇添加图解