当前位置:   article > 正文

大话C语言:第35篇 二维指针

大话C语言:第35篇 二维指针

二维指针,本质上是一个指向指针的指针,它使得通过一个指针变量就能跳转访问多个内存地址成为可能。二维指针主要用于处理指针的数组或指向指针的指针,特别是在动态创建和操作二维数组时非常有用。语法格式:

数据类型 **指针变量;

代码示例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4. // 定义一维指针数组,存储整数的指针
  5. int *ptrArray[3];
  6. // 为一维指针数组中的每个元素分配内存,并初始化整数值
  7. for (int i = 0; i < 3; i++)
  8. {
  9. ptrArray[i] = (int *)malloc(sizeof(int));
  10. if (ptrArray[i] == NULL)
  11. {
  12. printf("内存分配");
  13. return -1;
  14. }
  15. *ptrArray[i] = i + 1; // 为每个指针指向的整数赋值
  16. }
  17. // 定义二维指针,并让它指向一维指针数组
  18. int **twoDPtr = ptrArray;
  19. // 使用二维指针访问一维指针数组中的元素
  20. for (int i = 0; i < 3; i++)
  21. {
  22. printf("二维指针遍历一维指针,当前值是%d\n", *(twoDPtr[i]));
  23. }
  24. // 修改二维指针指向的值(即修改一维指针数组中的某个指针指向的整数)
  25. // 修改ptrArray[1]指向的整数值为100
  26. *(twoDPtr[1]) = 100;
  27. // 再次打印一维指针数组中的值,验证修改
  28. printf("修改之后:\n");
  29. for (int i = 0; i < 3; i++)
  30. {
  31. printf("二维指针遍历一维指针,当前值是%d\n", *(twoDPtr[i]));
  32. }
  33. // 释放分配的内存
  34. for (int i = 0; i < 3; i++)
  35. {
  36. free(ptrArray[i]);
  37. }
  38. return 0;
  39. }

二维指针作为函数参数,代码示例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 函数原型声明,接收一个二维指针参数
  4. void modifyArray(int **array, int size);
  5. int main()
  6. {
  7. // 整数指针数组
  8. int *array[3];
  9. // 为指针数组中的每个元素分配内存,并初始化整数值
  10. for (int i = 0; i < 3; i++)
  11. {
  12. array[i] = (int *)malloc(sizeof(int));
  13. if (array[i] == NULL) {
  14. perror("内存分配失败\n");
  15. retrun -1;
  16. }
  17. *array[i] = i; // 为每个指针指向的整数赋值
  18. }
  19. // 打印原始数组的值
  20. printf("原始数组的值分别是:\n");
  21. for (int i = 0; i < 3; i++) {
  22. printf("%d ", *array[i]);
  23. }
  24. printf("\n");
  25. // 调用函数修改数组中的值
  26. modifyArray(array, 3);
  27. // 打印修改后的数组的值
  28. printf("修改后的数组值分别是:\n");
  29. for (int i = 0; i < 3; i++)
  30. {
  31. printf("%d ", *array[i]);
  32. }
  33. printf("\n");
  34. // 释放内存
  35. for (int i = 0; i < 3; i++)
  36. {
  37. free(array[i]);
  38. }
  39. return 0;
  40. }
  41. // 函数定义,接收二维指针作为参数,并修改数组中的值
  42. void modifyArray(int **array, int size)
  43. {
  44. for (int i = 0; i < size; i++)
  45. {
  46. // 将数组中的每个值乘以2
  47. *array[i] *= 2;
  48. }
  49. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/921043
推荐阅读
相关标签
  

闽ICP备14008679号