| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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; 
} 
麻烦各位帮我看看这个程序错在哪里,为什么打出来的值不对
 本帖最后由 jackz007 于 2020-2-5 00:41 编辑 
      在 swap() 中,需要交换的的是两个输入指针所指向内存中的数据,而不是交换两个指针的值,因为作为函数输入参数的两个指针属于局部变量,在函数中对它们所做修改的影响范围只限于 swap() 函数以内,并不能作用到主函数 main() 中 。
 - #include <stdio.h>         
 
  
- 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     ;
 
 - }
 
  
- int main( )
 
 - {
 
 -         int a , b , c                       ;
 
 -         scanf("%d%d" , & a , & b)           ;
 
 -         sum(a , b , & c)                    ;
 
 -         swap(& a , & b)                     ;
 
 -         printf("sum = %d\n" , c)            ;
 
 -         printf("a = %d , b = %d\n" , a , b) ;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |