数组问题,求解答。
- C/C++ code
#include <stdio.h>#define N 5int main(void){ int i,j,tmp,m; int a[N]; for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0;i<N;i++) for(j=0;j<N-i;j++) { if(a[j]>a[j+1]) { tmp = a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("input a number:\n"); scanf("%d",&m); for(i=0;i<N;i++) { if(m>a[i]) ; else{ for(j=N;j>i;j--) a[j]=a[j-1]; a[i]=m; //这里不能把m的值赋给a【i】 break; } } for(i=0;i<N+1;i++) printf("%d ",a[i]); printf("\n"); return 0;}1 3 5 7 9
1 3 5 7 9
input a number:
2
1 9 3 5 7 9
输出结果是这样的,不知道是什么问题。
[解决办法]
内存空间实际上在分配的时候,m的地址是在数组之后,也就是在内存里实际上你所想要表示的a[5]代表的就是m。所以你判断完2比3小后,开始把数组往后挪,这时把a[4]赋值给下一个地址,也就是m,所以这时m的值已经被修改为9了,再用m来给a[1]赋值,a[1]输出当然是9
[解决办法]