鱼C论坛

 找回密码
 立即注册
查看: 163|回复: 2

[已解决]求大佬分析一下指针数组

[复制链接]
发表于 2024-10-8 19:49:55 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请大佬详细分析一下下面程序
谢谢



int a[10];
    {
        //定义一个指针数组类型
        typedef int(*PTypeArray)[10];
        PTypeArray myPArray;
        myPArray = &a;
        *myPArray[0] = 20;
        printf("a[0]:%d\n",a[0]);
    }
最佳答案
2024-10-9 10:26:04
1. `int a[10];` 定义了一个包含10个整数的数组 `a`。
2. 在接下来的代码块中(`{ ... }`),首先定义了一个类型别名 `PTypeArray`,它是一个指向包含10个整数的数组的指针。
3. `PTypeArray myPArray;` 声明了一个 `PTypeArray` 类型的变量 `myPArray`。
4. `myPArray = &a;` 将 `myPArray` 指向数组 `a` 的地址。
5. `*myPArray[0] = 20;` 这行代码看起来有点复杂,但实际上它做了以下几件事:
   - `myPArray[0]` 访问了指针数组 `myPArray` 的第一个元素,它是一个指向包含10个整数的数组的指针。
   - `*myPArray[0]` 通过解引用操作符 `*` 访问了这个指针指向的数组的第一个元素,也就是数组 `a` 的第一个元素。
   - 将这个元素的值设置为20。
6. `printf("a[0]:%d\n",a[0]);` 打印出数组 `a` 的第一个元素的值,根据上一步的赋值,应该打印出 `20`。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-8 19:54:29 | 显示全部楼层
这段代码其实操作比较简单,没有使用到指针数组,而是定义了一个指向整数的指针类型。让我们来逐步分析一下:

1. 声明了一个整型变量 `a`。

2. 使用 `typedef` 语句:
typedef int(*PTypeArray);
   这句代码定义了一个新的类型 `PTypeArray`,它代表的是“指向整数的指针”。注意这里的 `PTypeArray` 并不是指针数组,而仅仅是一个指针的别名。

3. 声明了一个指针 `myPArray`,类型是 `PTypeArray`,即 `int*` 类型。所以 `myPArray` 是指向整数的指针。

4. 将 `myPArray` 指向变量 `a`:
myPArray = &a;
   这意味着 `myPArray` 现在持有变量 `a` 的地址。

5. 通过指针修改 `a` 的值:
*myPArray = 20;
   这行代码通过解引用指针 `myPArray`,将 `a` 的值改成了 `20`。

6. 打印变量 `a` 的值:
printf("a:%d\n",a);
   输出为 `a:20`,因为之前已经将 `a` 的值改为了 `20`。

总之,这段代码展示的是通过指针修改变量值的常见做法,但和指针数组并无实际联系。通过 `typedef` 定义一个指针的别名,有时候可以让代码更易读,但也可能导致一些误解。

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

使用道具 举报

发表于 2024-10-9 10:26:04 | 显示全部楼层    本楼为最佳答案   
1. `int a[10];` 定义了一个包含10个整数的数组 `a`。
2. 在接下来的代码块中(`{ ... }`),首先定义了一个类型别名 `PTypeArray`,它是一个指向包含10个整数的数组的指针。
3. `PTypeArray myPArray;` 声明了一个 `PTypeArray` 类型的变量 `myPArray`。
4. `myPArray = &a;` 将 `myPArray` 指向数组 `a` 的地址。
5. `*myPArray[0] = 20;` 这行代码看起来有点复杂,但实际上它做了以下几件事:
   - `myPArray[0]` 访问了指针数组 `myPArray` 的第一个元素,它是一个指向包含10个整数的数组的指针。
   - `*myPArray[0]` 通过解引用操作符 `*` 访问了这个指针指向的数组的第一个元素,也就是数组 `a` 的第一个元素。
   - 将这个元素的值设置为20。
6. `printf("a[0]:%d\n",a[0]);` 打印出数组 `a` 的第一个元素的值,根据上一步的赋值,应该打印出 `20`。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 02:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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