#include<stdio.h>
void swap(int *p,int *q)//定义一个swap函数,用于交换两个变量的值 
{
    int c;
    c=*p;
    *p=*q;
    *q=c;
}
int main(){
    int a,b;
    int *p1,*p2;
    scanf("%d%d",&a,&b);
    p1=&a;p2=&b;//将a,b变量的地址分别赋值给指针变量p1,p2 
    swap(p1,p2);//执行swap函数体,使指针*p,*q的值交换 
    printf("\n%d  %d\n",a,b);//输出已经交换过的a,b的值 
    return 0; 
}
2 3

3  2

--------------------------------
Process exited after 2.188 seconds with return value 0
请按任意键继续. . .

  问题一:

#include<stdio.h>
void swap(int *p1,int *p2){
    int *p;
    p=p1;
    p1=p2;
    p2=p;
    printf("p1= %d\n",*p1);
    printf("p2= %d\n",*p2);

}
int main(){
  int a,b;
  int *c,*d;
  scanf("%d %d",&a,&b);
  c=&a;d=&b;
  swap(c,d);
  printf("a= %d\n",a);
  printf("b= %d\n",b);
  return 0;
}

 

1 0
p1= 0
p2= 1
a= 1
b= 0

--------------------------------
Process exited after 6.791 seconds with return value 0
请按任意键继续. . .

  总结1:由运行结果可知

swap函数中两个参数的值改变,然而主函数中a,b的值并为改变。因为调用函数中,是值传递。只是swap中值进行交换,主函数中没有交换。

 

#include<stdio.h>
void swap(int *p1,int *p2){
    int *p;
    *p=*p1;
    *p1=*p2;
    *p2=*p;
    printf("p1= %d\n",*p1);
    printf("p2= %d\n",*p2);

}
int main(){
  int a,b;
  int *c,*d;
  scanf("%d %d",&a,&b);
  c=&a;d=&b;
  swap(c,d);
  printf("a= %d\n",a);
  printf("b= %d\n",b);
  return 0;
}

总结:此代码编译时候没有错误,但是不能运行。

        我进行了调试,如下:

      

#include<stdio.h>
void swap(int *p1,int *p2){
    int *p;
    //*p=*p1;
   // *p1=*p2;
    //*p2=*p;
    printf("p1= %d\n",*p1);
    printf("p2= %d\n",*p2);

}
int main(){
  int a,b;
  int *c,*d;
  scanf("%d %d",&a,&b);
  c=&a;d=&b;
  swap(c,d);
  printf("a= %d\n",a);
  printf("b= %d\n",b);
  return 0;
}
5 6
p1= 5
p2= 6
a= 5
b= 6

--------------------------------
Process exited after 1.964 seconds with return value 0
请按任意键继续. . .

  

由此可知

 //*p=*p1;语句以下有错误。
接着进行下一步调试,如下:
#include<stdio.h>
void swap(int *p1,int *p2){
    int *p;
    *p=*p1;
   // *p1=*p2;
    //*p2=*p;
    printf("p1= %d\n",*p1);
    printf("p2= %d\n",*p2);

}
int main(){
  int a,b;
  int *c,*d;
  scanf("%d %d",&a,&b);
  c=&a;d=&b;
  swap(c,d);
  printf("a= %d\n",a);
  printf("b= %d\n",b);
  return 0;
}

这个代码不能正常运行可知

 // *p=*p1;语句开始有错误;
原因为*p是一个指针变量,p指向的内容不知道。然而p并没有确切的值,因此p所确定的元素是无法预料的。
 

 

posted on 2017-03-22 19:00  lnmark  阅读(1452)  评论(0编辑  收藏  举报