RangerKnight 2022-11-14 12:16 采纳率: 80%
浏览 18
已结题

一道有关c/c++指针的读程序题求解

一道c/c++读程序题,求解答具体原因

题目代码如下:

#include <stdio.h>
#include <stdlib.h>
void fun(int *p1, int *p2, int *s) {
    s = (int *)malloc(sizeof(int));
    *s = *p1 + *(p2++);
}
int main() {
    int a[2] = {1, 2}, b[2] = {10, 20}, *s = a;
    fun(a, b, s);
    printf("%d \n", *s);
}

这个结果为什么是1呢?题目解析没太看懂,我自认为算的是11,s = 1 + 10 = 11没太理解等于1的这个原由,求解答,谢谢!
题目给的解析如下:

解析:
本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1,选项C正确。

  • 写回答

3条回答 默认 最新

  • 谢玄. 2022-11-14 12:47
    关注

    注意 ! 在这里 s 是创建这个函数的时候的 新的 s 而不是 旧的 s 所以 如果修改了 s 原先的s并不会发生变化
    你可以复制下面的代码测试一下。

    #include <stdio.h>
    #include <stdlib.h>
    int* fun(int *p1, int *p2, int *s) {
        // 创建一个 空间 大小和 int 一致。
        // 并把空间的地址 给 s ;
        s = (int *)malloc(sizeof(int));
        // s 空间的值 = p1 空间的值 + p2 空间的值  并且 p2[0] ++ 
        *s = *p1 + *(p2++);
        
        // 注意 ! 在这里 s 是创建这个函数的时候的 新的 s 而不是 旧的 s 所以 如果修改了 s 原先的s并不会发生变化
        // 如果你需要改变原先的s就需要传入原先的地址 或者返回 新的 s 的地址
        
        return s;
    }
    int main() {
        int a[2] = {1, 2};
        int b[2] = {10, 20};
        // s = &a[0]
        int  *s = a;
        // 传入了地址 &a[0] , &b[0] , s 
        s = fun(a, b, s);
        printf("%d \n", *s);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月23日
  • 已采纳回答 11月15日
  • 创建了问题 11月14日

悬赏问题

  • ¥15 深度学习残差模块模型
  • ¥20 两个不同Subnet的点对点连接
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)