鱼C论坛

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

这道指针练习题答案有误吗?

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

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

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

x
  1. //下面程序的运行结果是
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. void fun(int **a,int p[2][3])
  5. {  **a=p[2][3];}
  6. int main()
  7. {
  8. int x[2][3]={2,4,6,8,10,12},*p;
  9. p=(int *)malloc(sizeof(int));
  10. fun(&p,x);
  11. printf(“%d\n”,*p);
  12. return(0);
  13. }
复制代码

选项:
A、10
B、12
C、6
D、8
参考答案:A。
我觉得ABCD都不对,**a=p[2][3];这句代码有问题把?
佬们觉得答案有误吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
这道题目的代码存在多处错误,无法正确运行,因此选项 ABCD 都不正确。以下是详细分析:

1. 语法错误:

  1. #include   // 缺少头文件名
  2. #include   // 缺少头文件名
  3. int x={2,4,6,8,10,12}; // 数组声明错误,应改为 int x[] = {...};
  4. printf(“%d\n”,*p); // 使用了中文引号“”,应改为英文引号"
复制代码


2. 核心逻辑错误:

  1. void fun(int **a, int p) {  
  2.   **a = p; // 错误1:参数p是int类型,但调用时传递的是数组地址(指针)
  3. }
  4. fun(&p, x); // 错误2:x是数组名(int*类型),与函数参数int p类型不匹配
复制代码


3. 运行结果分析:
- 若修正语法错误后,程序会因类型不匹配导致未定义行为(可能崩溃或输出随机值)
- **a = p 试图将数组地址 x(如 0x1000)当作整数赋值给 **a
- 输出 *p 时实际打印的是内存地址的整数值(如 4096),而非数组元素

4. 修正建议:
若想输出选项 A(10),代码应修改为:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void fun(int **a, int *p) {  // 修改1:第二参数改为指针类型
  4.   **a = *p;                 // 修改2:通过*p取元素值
  5. }
  6. int main() {
  7.   int x[] = {2,4,6,8,10,12}; // 修正数组声明
  8.   int *p = malloc(sizeof(int));
  9.   fun(&p, &x[4]);            // 传递x[4]的地址(对应元素10)
  10.   printf("%d\n", *p);        // 输出10
  11.   free(p);
  12.   return 0;
  13. }
复制代码


结论:原题代码存在根本性错误,参考答案 A 不具备参考价值。建议检查题目来源的可靠性。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 09:45 | 显示全部楼层

。。。

本帖最后由 想入门的新人 于 2025-7-24 15:45 编辑

搞错了 ,应该是那个fun()函数越界了,它最多访问到p[1][2]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-25 21:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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