为什么这个程序运行不出来结果呢?

img


为什么这个程序运行不出来结果呢?希望把数组元素逆序排列1111111111111111111111111

因为交换数组元素的函数inv里的for循环的结束条件错误,导致了数组越界,修改如下:


#include <stdio.h>

void inv(int *x,int n){
    int t,*i,*j;
    i=x;j=x+n-1;
    for(;i<j;i++,j--){
        t=*i;
        *i=*j;
        *j=t;
    }
    return ;
} 

int main(void){
    int i,a[10]={1,2,3,4,5,6,7,8,9,0};
    inv(a,10);
    for(i=0;i<10;i++){
        printf("%d ",a[i]) ;
    }
    
    return 0;
}

img

for(;i<j;i++,j--) 你的for循环写的不太对,这么改就可以了

改动处见注释,供参考:

#include <stdio.h>
void inv(int* x, int n)
{
    int t, * i, * j;
    i = x; j = x + n - 1;
    for (; i < j; i++, j--)
    //for(i<j;i++;j--) 修改
    {
        t = *i;
        *i = *j;
        *j = t;
    }
    return;
}
int main()
{
    int i, a[10] = { 1,2,3,4,5,6,7,8,9,0 };
    inv(a, 10);
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
    return 0;
}