以下程序打印在1和10单个printf语句如何更改数组中的值?
#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在上述情况下 ,但是如果我们除去主要功能在printf语句的注释,并给作为正常的printf语句输出是这怎么可能?这里有什么bug?
我使用的编译器是linux平台下的GCC编译器。
不要忽视'警告:函数返回本地variable' –
的地址,我得到了相同的代码预期的输出。它的未定义行为是因为你传递了局部变量地址。所以有时它会给出预期的输出,有时它不会。未定义的行为。 –