C语言中void函数为什么没有返回值也能运算
例题:将大于整数m且紧靠m的k个素数输出.#include"stdio.h"voidjsValue(intm,intk,intxx[]){inti,j,s=0;for(i...
例题:将大于整数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还是原来的值,也就是形参不影响实参,但是如果是数组的话在被调函数中改变,主调函数也会改变,也就是说数组是特例,指针我还没看到,内存方面我不太明白,不过数组肯定是占块内存不是占一两个地址我明白. 展开
#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还是原来的值,也就是形参不影响实参,但是如果是数组的话在被调函数中改变,主调函数也会改变,也就是说数组是特例,指针我还没看到,内存方面我不太明白,不过数组肯定是占块内存不是占一两个地址我明白. 展开
展开全部
形参不影响实参是对的。
函数调用后m,n,zz的值是不变的,但有点要注意,zz不变并不代表zz所指向的数组不变,zz只是指向数组,你可以理解为一个长整型(指针)
函数调用后m,n,zz的值是不变的,但有点要注意,zz不变并不代表zz所指向的数组不变,zz只是指向数组,你可以理解为一个长整型(指针)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把谭老师出的《C程序设计》第三版上的指针看精了,上面的问题就迎刃而解了!!!!!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询