读书人

请问一个关于指针的有关问题

发布时间: 2012-02-19 19:43:38 作者: rapoo

请教一个关于指针的问题
第一个程序:
#include <stdio.h>
swap(int *p1,int *p2)
{int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf( "%d,%d ",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a <b) swap(pointer_1,pointer_2);
printf( "\n%d,%d\n ",a,b);
}
第二个程序:
#include <stdio.h>
swap(int *p1,int *p2)
{int *p;
p=p1;
p1=p2;
p2=p;
}
main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf( "%d,%d ",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a <b) swap(pointer_1,pointer_2);
printf( "\n%d,%d\n ",*pointer_1,*pointer_2);
}
两个程序有什么区别?结果是否一致?多谢



[解决办法]
交换 指针
和交换 指针指向的数据
[解决办法]
有区别,主要区别在于swap的实现上
第一个程序能够实现值的交换
swap(int *p1,int *p2)
{int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
这个函数在函数内部交换了指针所指向的地址的内容的值而实现的交换,注意这里改变的是指向的地址的内容,而不是指针自己
第二个swap

swap(int *p1,int *p2)
{int *p;
p=p1;
p1=p2;
p2=p;
}
这个函数是在函数内部改变了指针自己,即休改了2个指针的指向地址,但因为函数的参数传递是以引用传值的,所以函数内部的改变并没有影响到实际的内容,所以并没有实现2个变量的交换
[解决办法]
不要认为传递参数是指针就可以达到改变实参的目的。

如果在函数中直接操作指针,
那么操作是无效的,
比如程序2。

只有对参数指针 * 解引用后操作才是有效反馈的,
比如程序1。

如果不理解,
就记住:
指针参数,必须 * 解引用后的操作才是可以反馈到实参的。

读书人网 >C语言

热点推荐