重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
其实并没有每次进入函数都初始化k为0,只不过你每次的先return了,然后在改变k的值,所以k的值就一直没变,都是0,你试试先把k的值改了,再return,应该就行了
成都创新互联公司2013年至今,是专业互联网技术服务公司,拥有项目成都做网站、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元郊区做网站,已为上家服务,为郊区各地企业和个人服务,联系电话:13518219792
看来你的C语言功底要加强一下了,说笑的!!!
在函数里调用另一个函数fun,要使用指针的方式才能改变它的值,如fun(int *x, int *y);
如果不使用指针而直接值传递调用,那么在调用完fun函数后,该函数做占用的内存、堆栈都会被释放,即a、b的值还是以前的,不会被改变;
使用指针的话,它会直接修改指针所指向的内存的值(const除外),从而达到交换的目的。
常规类型(int、double、float、char等)的都不会变
指针类型(int*、double*、float*,char*等)的都会变
数组类型(int[]、double[]、float[],char[])的也都会变
类也会变(c++范畴)
总而言之:参数指向值的,都不会变;参数指向地址的都会变(数组也是指向地址的。可以理解为本质也是指针)
你对函数调用和参数传递还不是很理解
1.首先函数调用的参数有形参和实参之分
swap(p,q);//p q为实参
void swap(int*a,int*b)//a b为形参
{int*t;
t=a;a=b;b=t;
}
2.指针变量名表示的是变量的值,这个值是其他变量的地址,而不是指针变量本身所在内存空间的地址
如:
int a;//定义整型变量,假设其地址为0xaaaaaaaa
int *p;//定义一个指针变量p,肯定要为其分配内存,假设为0xffffffff,还没初始化,里面的数据是不确定的。
p=a;//p表示的0xffffffff里面的数据,是a的地址,执行后0xffffffff里面的数据变成a的地址,即0xaaaaaaaa
*p=5;//往a里写入数据
3.形参跟实参是不同的变量,占用不同的内存空间
所以a b已经是两个跟p q不同的变量了。
只不过是值跟他们相等罢了。
就如int m,n;
m=n; 你能说m和n是同个变量么?
4.既然形参和实参是不同的变量,
t=a;a=b;b=t;
交换a b的值(交换存储在a b指针变量里的数据,这个数据是地址,变成a跟q指向同一个对象,b q指向同一个对象)不会影响到p q的值
int t;
t=*a;*a=*b;*b=t;//交换a b指针变量里的地址所指向的数据,这样才能交换。
如果通过函数传参方式调用,并且不是传的指针,那就不会改变原来的值,如果想改变全局变量的值,可以直接在函数中使用,不需要传参。也或者你传指针进去