指针和二维数组

 

 

 

 

### 二级指针的概念 二级指针是指向指针指针,其本质上也是一个变量,只不过这个变量存储的是另一个指针变量的地址。例如`int **p2`,`p2`就是一个二级指针,它可以指向一个`int *`类型的指针变量的地址 [^1]。 ### 二维数组的概念 二维数组可以看作是由多个一维数组组成的数组,它是一种多维的数据结构,通常用于表示表格或矩阵等数据。例如`int score[3][4]`,表示一个3行4列的二维数组,其中包含了3个长度为4的一维数组 [^2]。 ### 二级指针二维数组的区别 - **存储结构**:二维数组在内存中是连续存储的,所有元素依次排列在一块连续的内存区域中。而二级指针只是一个指针变量,它存储的是另一个指针的地址,这些被指向的指针所指向的内存区域不一定是连续的 [^2] [^3]。 - **访问方式**:C语言不允许直接使用二级指针二维数组进行访问与操作。若直接将二维数组的首地址赋给二级指针,无法正常访问数组元素。而二维数组可以通过下标直接访问元素,如`arr[i][j]`。若要使用二级指针访问二维数组,可先将二维数组定义为一个数组指针,再将数组指针的地址赋给二级指针,但一般不这么做,更改二维数组数据直接使用数组指针即可 [^2]。 ### 二级指针二维数组的联系 可以通过一定的方式建立二级指针二维数组的联系。例如,先将二维数组定义为一个数组指针,再把数组指针的地址赋给二级指针,之后就能通过二级指针操作二维数组,但这种方法不常用。另外,在动态分配二维数组内存时,会用到二级指针。如`int **d`,先为二级指针分配指向若干个指针的内存,再为每个指针分配指向一维数组的内存,从而模拟出二维数组的效果 [^2] [^4]。 示例代码展示二级指针二维数组的关系: ```c #include <stdio.h> #include <stdlib.h> int main() { // 二维数组 int score[3][4] = {{98,99,97,100}, {56,58,59,59}, {85,89,87,88}}; // 数组指针 int (*p)[4] = score; // 二级指针 int **p2; p2 = (int **)&p; **p2 = 100; printf("score=%p\n", score); printf("*p2=%p\n", *p2); printf("**p2=%d\n", score[0][0]); // 动态分配二维数组 int **d; d = (int **)malloc(sizeof(int *) * 2); for (int i = 0; i < 2; i++) { d[i] = (int *)malloc(sizeof(int) * 3); for (int j = 0; j < 3; j++) { d[i][j] = i + j * 2; } } // 释放内存 for (int i = 0; i < 2; i++) { free(d[i]); } free(d); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值