以下程序打印 1 到 10 之间的质数。
#include <stdio.h>
int* prime(int x,int y,int* range);
void main()
{
int *x,s=10;
int i=0;
x=prime(1,10,&s);
for(i=0;i<s;i++)
{
printf("%d\n",x[i]);
}
}
int* prime(int x,int y,int *range){
int num[100],i,j,flag,inc=0;
for(i=x;i<=y;i++)
{
flag=1;
for(j=2;j<=(i/2);j++)
{
if(i%j == 0)
flag=-1;
}
if(flag==1)
{
num[inc]=i;
inc++;
}
}
*range=inc;
//printf("$$%d$$",*range);
return num;
}
输出是 1 2 3 5 0 在上面的例子中,但是如果我们删除 prime 函数中 printf 语句中的注释并给出正常的 printf 语句,输出是 1 2 3 5 7 这怎么可能??这里有什么错误??
我使用的编译器是linux平台下的GCC编译器。
最佳答案
您的 prime()
方法返回位于堆栈中的局部变量 num
,因此它不在 prime() 之后的范围内(也称为无效)
调用返回。
几个修复:
- 您可以在
prime
中将num
设为静态 - 你可以动态分配
num
(记得释放它) - 您可以将
num
传递给prime
方法。
关于c - 单个 printf 语句如何更改数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17962045/