怎么让指针指向二维数组
时间: 2023-11-02 17:19:20 浏览: 71
在 C 语言中,可以通过以下两种方式让指针指向二维数组:
1. 使用数组名作为指针
例如,有一个二维数组 `arr`,可以使用以下代码让指针 `p` 指向该数组:
```
int arr[3][4];
int (*p)[4] = arr;
```
在上述代码中,`p` 是一个指向长度为 4 的 int 数组的指针,因此可以访问二维数组 `arr` 中的任意元素。
2. 使用动态分配内存的方式
可以使用 `malloc()` 函数动态分配内存来创建一个二维数组,并将其赋给指针。
例如,以下代码创建了一个 3 行 4 列的 int 类型二维数组,并将其赋给指针 `p`:
```
int **arr;
arr = (int **)malloc(3 * sizeof(int *));
for (int i = 0; i < 3; i++) {
arr[i] = (int *)malloc(4 * sizeof(int));
}
int (*p)[4] = arr;
```
在上述代码中,`arr` 是一个指向指针的指针,它指向一个包含 3 个指针的一维数组,每个指针指向一个包含 4 个 int 类型元素的一维数组。最后将 `arr` 赋给指针 `p`,使得 `p` 指向二维数组。
相关问题
如何让指针指向二维数组
指针指向二维数组需要注意数组的存储方式,二维数组是连续存储的一维数组。因此,可以使用指针数组来指向二维数组,或者使用指针指向一维数组,再使用指针移动来访问二维数组。
指针数组指向二维数组:
```c
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*pArr)[3] = arr; // 指向数组元素类型为 int[3] 的指针
printf("%d\n", *(*pArr+1)); // 输出 2
```
指针指向一维数组,再使用指针移动访问二维数组:
```c
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
int *pArr = arr[0]; // 指向数组元素类型为 int 的指针,指向第一个元素
printf("%d\n", *(pArr+1)); // 输出 2
pArr = arr[1]; // 指向第二个元素
printf("%d\n", *(pArr+2)); // 输出 6
```
一维数组指针指向二维数组
一维数组指针可以指向二维数组。在C语言中,二维数组实际上是由多个一维数组组成的。可以通过定义一个指向一维数组的指针来指向二维数组的首地址。例如,可以定义一个指向int类型的一维数组指针来指向int类型的二维数组:
```c
int ary[4][5];
int (*aryp)[5] = ary;
```
在上面的例子中,`aryp`是一个指向int类型的一维数组的指针,它指向了`ary`二维数组的首地址。可以通过`aryp`来访问二维数组中的元素。
阅读全文