一个有关函数的简单问题。
为什么#include<stdio.h>void hanshu(int a){
a=a+3;
}
int main(){
int a=5;
hanshu(a);
printf("%d",a);
return 0;
}里输出的还是5,而#include<stdio.h>
void main()
{
void sort(int array[],int n);
int a[10],i;
printf("enter the array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
void sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
里的数组可以通过函数变换值?
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
请问,(array[j]<array[k])了,为什么K还等于J?还得转换`?
貌似,这是个调用函数?
- - int a=5;
hanshu(a);
printf("%d",a);
return 0;
为什么不是return a ;
上面要返回的值是什么? 因为
int main(){
int a=5;
hanshu(a);
printf("%d",a);
return 0;
这里的a
与
void hanshu(int a)
{
a=a+3;
}
这里的a并不是同一个变量,
你总是认为他们是相等的,其实不然
你可以把
void hanshu(int a)
{
a=a+3;
}
这里改成
void hanshu(int b)
{
b=b+3;
}
这样,你就很容易明白.
[[it] 本帖最后由 JAVA!! 于 2008-9-3 01:05 编辑 [/it]] 第一个是值传递, [quote][bo][un]mythhaha[/un] 在 2008-9-2 23:13 的发言:[/bo]
第一个是值传递,只是把a的值COPY一份传进去,不改变实参a的值,第2个函数是指针传递,传递的是数组的指针,所以能改变数组的值。个人看法 ,我也是新手,不对的地方请高手指点,谢谢 [/quote]
鄙人认为他的观点是正确的。 那怎么判断传递的是值还是指针呢???请大虾们举个小例子吧。谢谢!
回复 12# qingxin111 的帖子
#include <stdio.h>void ValueReference(int i);//值引用函数
void PointerReference(int* p);//指针引用函数
void main()
{
int i=3;
int *p;
p=&i;
printf("i的地址=%p,p的地址=%p\n",&i,p);
printf("调用ValueReference函数以后:\n");
ValueReference(i);
printf("i的值=%d\n",i);
printf("调用PointerReference函数以后:\n");
PointerReference(p);
printf("i的值=%d\n",i);
}
void ValueReference(int i)
{
i+=3;
printf("值传递以后i的地址=%p,",&i,i);
}
void PointerReference(int* p)
{
*p+=3;
printf("指针传递以后p的地址=%p,",p);
}
/*
你会发现ValueReference函数中被传过来的参数i的地址已经与主函数中的i的地址不相同,
也就是说ValueReference函数操作的i只是主函数中i的一个副本,该函数只改变了i的副本的值,并没有改变实际i的值;
而PointerReference函数的参数是i的地址,函数修改了p所指向的值,也就修改了i地址所指向的值。
LS,明白否?解释若有不妥之处,请大家指正。
*/ 明白了,非常感谢各位帮忙的热心人! 一个属于单向传递,一个属于指针; 第一个是值传递,为单向传递;第二个是地址传递,可以双向传递。原因就是这样简单1·····
页:
[1]
