于是发现了这个bug,请大家聊聊,看看是不是bug,或者是我的程序有错误。
源程序如下:
代码: 全选
#include<stdio.h>
int *Scanf(int i){//这是数组输入函数
int *p,m[10];
switch(i){
case 1:scanf("%d",&m[0]);break;
case 2:scanf("%d %d",&m[0],&m[1]);break;
case 3:scanf("%d %d %d",&m[0],&m[1],&m[2]);break;
case 4:scanf("%d %d %d %d",&m[0],&m[1],&m[2],&m[3]);break;
case 5:scanf("%d %d %d %d %d",&m[0],&m[1],&m[2],&m[3],&m[4]);break;
case 6:scanf("%d %d %d %d %d %d",&m[0],&m[1],&m[2],&m[3],&m[4],&m[5]);break;
case 7:scanf("%d %d %d %d %d %d %d",&m[0],&m[1],&m[2],&m[3],&m[4],&m[5],&m[6]);break;
case 8:scanf("%d %d %d %d %d %d %d %d",&m[0],&m[1],&m[2],&m[3],&m[4],&m[5],&m[6],&m[7]);break;
case 9:scanf("%d %d %d %d %d %d %d %d %d",&m[0],&m[1],&m[2],&m[3],&m[4],&m[5],&m[6],&m[7],&m[8]);break;
case 10:scanf("%d %d %d %d %d %d %d %d %d %d",&m[0],&m[1],&m[2],&m[3],&m[4],&m[5],&m[6],&m[7],&m[8],&m[9]);break;
}
p=m;
return p;
}
void Printf(int i,int *p){//这是数组输出函数
switch(i){
case 1:printf("%d\n",*p);break;
case 2:printf("%d %d\n",*p,*(p+1));break;
case 3:printf("%d %d %d\n",*p,*(p+1),*(p+2));break;
case 4:printf("%d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3));break;
case 5:printf("%d %d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4));break;
case 6:printf("%d %d %d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5));break;
case 7:printf("%d %d %d %d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5),*(p+6));break;
case 8:printf("%d %d %d %d %d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5),*(p+6),*(p+7));break;
case 9:printf("%d %d %d %d %d %d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5),*(p+6),*(p+7),*(p+8));break;
case 10:printf("%d %d %d %d %d %d %d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5),*(p+6),*(p+7),*(p+8),*(p+9));break;
}
printf("\n");
}
int main(){
int i;
int *p;
scanf("%d",&i);
p=Scanf(i);
// printf("所输入的数组为:");
Printf(i,p);
}
但请注意main函数中被注释掉的一行,当去掉注释符号的时候,虽然可以无错误地通过编译,但结果却不是预期的。
我编的函数需要用到数组的直接输入和输出,因此已经挣扎了两个晚上了,希望有人能指点一下。
我的gcc版本是 4.2.4 (Ubuntu 4.2.4-lubuntu3)