当前位置: 代码迷 >> C语言 >> 传值传址问题?
  详细解决方案

传值传址问题?

热度:142   发布时间:2007-11-01 20:26:36.0
传值传址问题?

1.swap(int *p1,int *p2)
{ int *p;
p=p1;
p1=p2;
p2=p
; 不行;不能企图通过改变形参指针变量的值来改变实参,而要通过改变实参变量指针指向的值;
}
main()
{ int a,b;
int *pointer1,*pointer2;
scanf("%d,%d",&a,&b);
pointer1=&a;
pointer2=&b;
if(a<b) swap(pointer1,pointer2);
printf("\n%d,%d\n",*pointer1,*pointer2);
}

2.#include<string.h>
main()
{
void sort(char *name[],int n);
void print(char *name[],int n);
char *name[]={"follow me","basic","great wall","format","computer designe"};
int n=5;
sort(name,n);
print(name,n);
}
void sort(char *name[],int n)
{ char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0)k=j;
if(k!=j)
{ temp=name[i];name[i]=name[k];name[k]=temp;}
}
}
void print(char *name[], int n )
{int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}
第一个不行,为什么第二个行呀?两者实质感觉一样啊!只是前者只有一个数字,而后者是一个数组形式,
只是存储单元大小不一呀

搜索更多相关的解决方案: int  传址  传值  变量  

----------------解决方案--------------------------------------------------------
int *p;
*p=*p1;
*p1=*p2;
*p2=*p;

改成这样,要修改的是指针指向的值,不是修改指针本身
----------------解决方案--------------------------------------------------------
int *p;
p=p1;
p1=p2;
p2=p
;
这是在交换几个地址 没有动a,b的值

想完成交换的应改成
int p;
p=*p1;
*p1=*p2;
*p2=p;

----------------解决方案--------------------------------------------------------

但后面的数组为什么可以呀?
两者本质上感觉没区别呢


----------------解决方案--------------------------------------------------------
指针和数组没区别???!!!!
----------------解决方案--------------------------------------------------------

数组名就是一个指向数组第一个元素的指针,
可以对这个指针做下标操作来访问数组元素。


----------------解决方案--------------------------------------------------------
{ temp=name[i];name[i]=name[k];name[k]=temp;}
等价于
{
temp=*(name+i);
*(name+i)=*(name+k);
*(name+k)=temp;
}

跟3楼帮你改正的程序一摸一样吧
----------------解决方案--------------------------------------------------------

程序变动很小一个字符就可能会千差万别呀!顶一下!


----------------解决方案--------------------------------------------------------
“不能企图通过改变形参指针变量的值来改变实参”这句话我的理解是因为形参是被调函数的局部变量,形参指针拷贝了实参指针的值,在函数调用完成后,这些局部变量所占的空间被自动释放了,而实参指针的值没有发生任何改变。
----------------解决方案--------------------------------------------------------
*p 和 p是不一样的
----------------解决方案--------------------------------------------------------
  相关解决方案