鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 数据总线

[已解决]指针数组的遍历

[复制链接]
 楼主| 发表于 2024-2-28 17:20:28 | 显示全部楼层
FishC 发表于 2024-2-28 17:19
非常抱歉,我之前的回答有误。在指针数组中,你需要使用指针来访问数组的元素,并且拿到数组长度也需要 ...

arr1 length: 1 2 3 4 5 8 0 0
arr2 length: 6 7 8 9 10 1 2 3
arr3 length: 11 12 13 14 15 6 7 8
arr4 length: 16 17 18 19 20 11 12 13
arr5 length: 21 22 23 24 25 16 17 18  这回的运行结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-28 17:21:00 | 显示全部楼层
数据总线 发表于 2024-02-28 17:20
arr1 length: 1 2 3 4 5 8 0 0
arr2 length: 6 7 8 9 ...


非常抱歉,之前的代码还是有问题。这里有一种修正方案:#include int main() {    unsigned char arr1[] = {1, 2, 3, 4, 5};    unsigned char arr2[] = {6, 7, 8, 9, 10};    unsigned char arr3[] = {11, 12, 13, 14, 15};    unsigned char arr4[] = {16, 17, 18, 19, 20};    unsigned char arr5[] = {21, 22, 23, 24, 25};    unsigned char *arr_tab[] = {arr1, arr2, arr3, arr4, arr5};    int arr_count = sizeof(arr_tab) / sizeof(arr_tab[0]);    for (int i = 0; i < arr_count; i++) {        unsigned char *current_arr = arr_tab;        int arr_length = sizeof(current_arr) / sizeof(current_arr[0]);        printf("arr%d length: ", i + 1);        for (int j = 0; j < arr_length; j++) {            printf("%d ", current_arr[j]);        }        printf("\n");    }    return 0;}在这个修正后的代码中,我们使用了数组来存储每个数组的元素,并且使用 `sizeof(arr_tab) / sizeof(arr_tab[0])` 来计算指针数组的长度。然后,我们使用 `sizeof(current_arr) / sizeof(current_arr[0])` 来计算每个数组的长度,并通过循环遍历打印出每个数组的元素。非常抱歉之前的回答还是有误导性,希望这次的回答是正确的。如果还有任何问题,请随时追问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-28 17:22:47 | 显示全部楼层
FishC 发表于 2024-2-28 17:19
非常抱歉,我之前的回答有误。在指针数组中,你需要使用指针来访问数组的元素,并且拿到数组长度也需要 ...

还是不行,要不我再想想看吧,非常感谢你耐心的回答,谢谢你~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-28 17:23:23 | 显示全部楼层
数据总线 发表于 2024-02-28 17:22
还是不行,要不我再想想看吧,非常感谢你耐心的回答,谢 ...


非常抱歉,之前的回答依然有误。在你的代码中,arr1、arr2、arr3、arr4和arr5都是单个字符变量,并不是数组。所以我们无法通过指针数组访问它们。如果你想访问它们并输出元素,可以直接使用原始的方式来操作。例如,你可以修改data_Send函数来接收cnt参数,并根据cnt的值选择对应的变量进行操作。以下是修改后的代码示例:

  1. #include <stdio.h>

  2. void data_Send(unsigned char cnt) {
  3.     unsigned char *arr;
  4.     if (cnt == 0) {
  5.         arr = &arr1;
  6.         printf("arr1 length: ");
  7.     } else if (cnt == 1) {
  8.         arr = &arr2;
  9.         printf("arr2 length: ");
  10.     } else if (cnt == 2) {
  11.         arr = &arr3;
  12.         printf("arr3 length: ");
  13.     } else if (cnt == 3) {
  14.         arr = &arr4;
  15.         printf("arr4 length: ");
  16.     } else if (cnt == 4) {
  17.         arr = &arr5;
  18.         printf("arr5 length: ");
  19.     } else {
  20.         printf("Invalid input");
  21.         return;
  22.     }

  23.     for (int i = 0; i < 8; i++) {
  24.         printf("%d ", arr[i]);
  25.     }
  26.     printf("\n");
  27. }

  28. int main() {
  29.     data_Send(0);

  30.     return 0;
  31. }
复制代码


这段代码中,我们根据传入的cnt值判断要操作的变量,并用指针arr指向对应的变量。然后,使用for循环遍历arr指针所指向的变量,并打印出每个元素。

希望这次能够帮到你,如果还有任何问题,请随时提问。感谢你的耐心和理解!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 14:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表