赞
踩
二维指针,本质上是一个指向指针的指针,它使得通过一个指针变量就能跳转访问多个内存地址成为可能。二维指针主要用于处理指针的数组或指向指针的指针,特别是在动态创建和操作二维数组时非常有用。语法格式:
数据类型 **指针变量;
代码示例:
- #include <stdio.h>
- #include <stdlib.h>
-
- int main() {
- // 定义一维指针数组,存储整数的指针
- int *ptrArray[3];
-
- // 为一维指针数组中的每个元素分配内存,并初始化整数值
- for (int i = 0; i < 3; i++)
- {
- ptrArray[i] = (int *)malloc(sizeof(int));
- if (ptrArray[i] == NULL)
- {
- printf("内存分配");
-
- return -1;
- }
-
- *ptrArray[i] = i + 1; // 为每个指针指向的整数赋值
- }
-
- // 定义二维指针,并让它指向一维指针数组
- int **twoDPtr = ptrArray;
-
- // 使用二维指针访问一维指针数组中的元素
- for (int i = 0; i < 3; i++)
- {
- printf("二维指针遍历一维指针,当前值是%d\n", *(twoDPtr[i]));
- }
-
- // 修改二维指针指向的值(即修改一维指针数组中的某个指针指向的整数)
- // 修改ptrArray[1]指向的整数值为100
- *(twoDPtr[1]) = 100;
-
- // 再次打印一维指针数组中的值,验证修改
- printf("修改之后:\n");
- for (int i = 0; i < 3; i++)
- {
- printf("二维指针遍历一维指针,当前值是%d\n", *(twoDPtr[i]));
- }
-
- // 释放分配的内存
- for (int i = 0; i < 3; i++)
- {
- free(ptrArray[i]);
- }
-
- return 0;
- }
二维指针作为函数参数,代码示例:
- #include <stdio.h>
- #include <stdlib.h>
-
- // 函数原型声明,接收一个二维指针参数
- void modifyArray(int **array, int size);
-
- int main()
- {
- // 整数指针数组
- int *array[3];
-
- // 为指针数组中的每个元素分配内存,并初始化整数值
- for (int i = 0; i < 3; i++)
- {
- array[i] = (int *)malloc(sizeof(int));
- if (array[i] == NULL) {
- perror("内存分配失败\n");
- retrun -1;
- }
- *array[i] = i; // 为每个指针指向的整数赋值
- }
-
- // 打印原始数组的值
- printf("原始数组的值分别是:\n");
- for (int i = 0; i < 3; i++) {
- printf("%d ", *array[i]);
- }
- printf("\n");
-
- // 调用函数修改数组中的值
- modifyArray(array, 3);
-
- // 打印修改后的数组的值
- printf("修改后的数组值分别是:\n");
- for (int i = 0; i < 3; i++)
- {
- printf("%d ", *array[i]);
- }
- printf("\n");
-
- // 释放内存
- for (int i = 0; i < 3; i++)
- {
- free(array[i]);
- }
-
- return 0;
- }
-
- // 函数定义,接收二维指针作为参数,并修改数组中的值
- void modifyArray(int **array, int size)
- {
- for (int i = 0; i < size; i++)
- {
- // 将数组中的每个值乘以2
- *array[i] *= 2;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。