C语言中void函数为什么没有返回值也能运算

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:04:24
例题:将大于整数m且紧靠m的k个素数输出.

#include "stdio.h"
void jsValue(int m,int k,int xx[])
{
int i,j,s=0;
for(i=m+1;k>0;i++)
{for(j=2;j<i;j++)
if(i%j==0) break;
if(i==j)
{xx[s++]=i;k--;}
}
}
main()
{int m,n,zz[100];
printf("\n 请输入两个整数:");
scanf("%d%d",&m,&n);
jsValue(m,n,zz);
for(m=0;m<n;m++)
printf("%d",zz[m]);
}
这道题的算法我是明白的,比较迷茫的是C语言明文规定形参不影响实参,
而这道题中既然被调函数是void没有返回值,怎么能影响主调函数main的.
由main显示结果说明被调函数中的数组的数据传递给了主调函数,这和void没返回值严重冲突啊,很迷茫请求高手完美解答一下.汗!经常问问题就剩5分了不好意思...
1楼大哥的意思是不是说m和k还是原来的值,也就是形参不影响实参,但是如果是数组的话在被调函数中改变,主调函数也会改变,也就是说数组是特例,指针我还没看到,内存方面我不太明白,不过数组肯定是占块内存不是占一两个地址我明白.

“形参不影响实参”这句要注意理解,当参数是数组、指针时特别注意。

本例子中函数void jsValue(int m,int k,int xx[])的三个参数是m、k、xx,函数里面无论对这三个数如何改变,函数返回后三个数还是调用前的值,这句话对于m和k很好理解,对于xx而言,其值是指向的某块内存,注重点是指向,这个指向是不会改变的,但是指向的内容被改变了。

你把谭老师出的《C程序设计》第三版上的指针看精了,上面的问题就迎刃而解了!!!!!!!

形参不影响实参是对的。

函数调用后m,n,zz的值是不变的,但有点要注意,zz不变并不代表zz所指向的数组不变,zz只是指向数组,你可以理解为一个长整型(指针)