鱼C论坛

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

[已解决]C语言用指针求和两个数以及交换

[复制链接]
发表于 2020-2-4 22:49:32 | 显示全部楼层 |阅读模式

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

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

x
调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求:   ⑴ 2个数的和,    ⑵ 2个数交换值。
#include <stdio.h>         
void main( )
{ int a,b,c,*p=&c;
  void  sum(int  ,int ,int *);
  void swap(int * ,int * );
  scanf("%d,%d",&a,&b);
  sum(a,b,p);
  swap(&a,&b);
  printf("sum=%d\n",c);
  printf("a=%d,b=%d\n",a,b);
}
void  sum(int a,int b,int *c)
{ *c=a+b;
}
void swap(int *a,int *b)
{ int *t;
  t=a;
  a=b;
  b=t;
}
麻烦各位帮我看看这个程序错在哪里,为什么打出来的值不对
最佳答案
2020-2-5 00:11:25
本帖最后由 jackz007 于 2020-2-5 00:41 编辑

      在 swap() 中,需要交换的的是两个输入指针所指向内存中的数据,而不是交换两个指针的值,因为作为函数输入参数的两个指针属于局部变量,在函数中对它们所做修改的影响范围只限于 swap() 函数以内,并不能作用到主函数 main() 中 。

  1. #include <stdio.h>         

  2. void  sum(int a , int b , int * c)
  3. {
  4.         * c = a + b ;
  5. }

  6. void swap(int * a , int * b)
  7. {
  8.         int t       ;
  9.         t = * a     ;
  10.         * a = * b   ;
  11.         * b = t     ;
  12. }

  13. int main( )
  14. {
  15.         int a , b , c                       ;
  16.         scanf("%d%d" , & a , & b)           ;
  17.         sum(a , b , & c)                    ;
  18.         swap(& a , & b)                     ;
  19.         printf("sum = %d\n" , c)            ;
  20.         printf("a = %d , b = %d\n" , a , b) ;
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-5 00:11:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-2-5 00:41 编辑

      在 swap() 中,需要交换的的是两个输入指针所指向内存中的数据,而不是交换两个指针的值,因为作为函数输入参数的两个指针属于局部变量,在函数中对它们所做修改的影响范围只限于 swap() 函数以内,并不能作用到主函数 main() 中 。

  1. #include <stdio.h>         

  2. void  sum(int a , int b , int * c)
  3. {
  4.         * c = a + b ;
  5. }

  6. void swap(int * a , int * b)
  7. {
  8.         int t       ;
  9.         t = * a     ;
  10.         * a = * b   ;
  11.         * b = t     ;
  12. }

  13. int main( )
  14. {
  15.         int a , b , c                       ;
  16.         scanf("%d%d" , & a , & b)           ;
  17.         sum(a , b , & c)                    ;
  18.         swap(& a , & b)                     ;
  19.         printf("sum = %d\n" , c)            ;
  20.         printf("a = %d , b = %d\n" , a , b) ;
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 12:43:40 | 显示全部楼层
jackz007 发表于 2020-2-5 00:11
在 swap() 中,需要交换的的是两个输入指针所指向内存中的数据,而不是交换两个指针的值,因为作为函 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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