C enhance Day(四)

一. 回顾

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4)三种二级指针内存模型图

在这里插入图片描述

二. 二维数组

2.1 数组类型的定义

  • 数组类型:由元素个数 和 元素类型对应 int [8]
  • 通过typedef定义一个数组类型
  • 有typedef是类型,没有typedef是变量
    在这里插入图片描述

2.2 指针数组

  • 指针数组:它是数组,每个元素都是指针
    在这里插入图片描述
  • main函数的参数:
    argc:传参数的个数(包含可执行程序)
    argv:指针数组,指向输入的参数

2.3 数组指针

< 1 > 定义数组指针的第一种方式

  • 数组指针:它是指针,指向一个数组的指针
  • 数组指针,指向一维数组的整个数组,而不是首元素地址

在这里插入图片描述

  • 这里需要注意的是p = a是会警告的,因为p应该是指向一整个一维数组的,而a是首元素的地址,不报错是因为首元素地址和整个数组的首地址是相同的。
  • 此时打印p+1的,相比于p加的步长是一整个一维数组的长度,也就是40:
    在这里插入图片描述
  • 如果要给数组指针所指向的数组赋值,操作如下:
    在这里插入图片描述
    打印方式如下:
    在这里插入图片描述

< 2 > 定义数组指针的第二种方式

  • 先定义数组指针类型,再根据类型定义变量
  • 第二种定义方式和指针数组写法很类似,多了一个( )
  • ( )和[ ]的优先级是一样的,从左往右
  • ( )里面有指针,它是一个指针
  • 指向数组的指针,但是有了typedef,所以它是一个数组指针类型

定义了一个数组指针类型,然后根据这个类型定义了一个变量q:
在这里插入图片描述

现在给这个数组指针一个指向:

int a[10] = {0};

typedef int (*P)[10];
P q;
q = &a;

< 3 > 定义数组指针的第三种方式

在这里插入图片描述

< 4 > 总结

在这里插入图片描述

2.4 二维数组的使用

定义数组 int a3[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}

  • 二维数组数组名代表第0行的首地址
  • 区别于第0行首元素地址,它们的值是一样的,但是步长不一样
  • 二维数组的数组名,可以理解是一维数组的数组名加上取地址&,这两个代表的意思是一样的
  • *(a3 + 0)给二维数组的数组名加 * 号,此时表示的是第0行首元素的地址,咱也不知道为啥,记着吧。所以第0行第二个元素的地址是*(a3+0)+1 。第1行首元素的地址为*(a3+1),相比于*(a3+0)偏移的是16个字节
  • 因为 *[ ]是等价的,所以*(a3+0)a3[0]是等价的,a3[1]*(a3+1) 是等价的,a3[0]a3[1]跨越16个字节。a3[0]表示的是第0行的首元素的地址,a3[0]+1表示的是第0行第二个元素的地址,a3[0]a3[0]+1跨越4个字节
    在这里插入图片描述

总结一下:

在这里插入图片描述
在这里插入图片描述

2.5 数组指针和二维数组相结合

注意:这里 p = &a 又会报警告,因为这里的a变成二维数组了,这里的&a表示的是整个二维数组的首地址,上面定义的指向一维数组的数组指针时这样使用就是对的,具体的为什么自己理解一下。

在这里插入图片描述
打印二维数组的值:

在这里插入图片描述

2.6 首行首元素地址和首行首地址的区别

  • 测量一维数组的长度时,sizeof输入的是首行首元素的地址,如:sizeof(t)
    在这里插入图片描述
  • 二维数组的a[0],表示的是第0行首元素的地址,所以等于sizeof测出来是40个字节。&a[0]表示的是第0行整个一维数组的地址,它是一个指针类型,所以是4个字节
    在这里插入图片描述

2.7 二维数组做函数参数

在这里插入图片描述

< 1 > 5K写法

在这里插入图片描述

< 2 > 7K写法

在这里插入图片描述

< 3 > 错误写法

这里二级指针,a+1跳的是4个字节,其它三种写法步长是 a+1 一次跳一行,16个字节

在这里插入图片描述

< 4 > 9K写法

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Enhance Class Decompiler是一种Java反编译器,可以将编译过的Java类文件解码为可读的源代码。离线安装Enhance Class Decompiler的步骤如下: 1. 首先,您需要从官方网站https://www.enhancejava.com/下载Enhance Class Decompiler。 2. 解压下载文件中的zip文件,其中包含两个jar文件,分别是Enhance Class Decompiled和Enjarify。 3. 打开命令提示符(Windows)或终端(Mac或Linux),切换到解压后文件所在的目录。 4. 使用以下命令将Enhance Class Decompiled安装到本地Maven存储库中: ``` mvn install:install-file -Dfile=enhance-class-decompiler-<version>.jar -DgroupId=com.enhancejava.decompiler -DartifactId=enhance-class-decompiler -Dversion=<version> -Dpackaging=jar ``` 其中,`<version>`是Enhance Class Decompiler的版本号。此命令将使Enhance Class Decompiled可供Maven项目使用。 5. 如果您想在命令行中使用Enhance Class Decompiler,可以使用以下命令: ``` java -jar enhance-class-decompiler-<version>.jar <class-file-path> ``` 其中,`<class-file-path>`是要反编译的Java类文件的路径。反编译后的代码将输出到控制台。 6. 如果您正在使用集成开发环境(IDE),可以将Enhance Class Decompiled添加为IDE的插件或扩展程序。具体操作步骤取决于您使用的IDE。 以上是离线安装Enhance Class Decompiler的步骤。请注意,您需要具备一定的Java和Maven知识才能成功安装和使用Enhance Class Decompiler。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值