数组升序,两个代码之间的区别,一个对一个错


#include<stdio.h>
int main()
{
    int num[10];
    int i,j,temp;
    for ( i = 0 ; i < 10 ; i++ )
    {
        scanf("%d",&num[i]);
    }
    for ( i = 0 ; i < 10 ; i++ )
    {
        printf("%d\t",num[i]);
    }
    printf("\n");
    for ( i = 0 ; i < 9 ; i++ ) 
    {
        for( j = 0 ; j < 9-i ; j++ )
        {
            if( num[j] > num[j+1] )
            {
                temp = num[j];
                num[j] = num[j+1];
                num[j+1] = temp;
            }
        }
    }
    for ( i = 0 ; i < 10 ; i++ )
        printf("%d  ",&num[i]);
    return 0;
}

这串代码结果如下:
2 3 4 6 7 8 5 1 9 0
6356684 6356688 6356692 6356696 6356700 6356704 6356708 6356712 6356716 6356720
6356684 6356688 6356692 6356696 6356700 6356704 6356708 6356712 6356716 6356720

而另一串代码


#include<stdio.h> 

void sort(int a[],int n);  /*函数声明*/ 
int  main()
{ 
    int s[10],i;
    for ( i = 0 ; i < 10 ; i++ )
    {
        scanf("%d",&s[i]);
    }
    for ( i = 0 ; i < 10 ; i++ )
    {
        printf("%d\t",&s[i]);
    }
    printf("\n");
       sort(s,10);   /*函数调用*/   
       for(i=0;i<10;i++) 
        printf("%d  ",s[i]); 
        printf("\n"); 
        return  0; 
} 

void  sort(int  a[],int  n)   /*函数定义,按冒泡方法排序*/ 
{ 
    int i,j,t;
    for(i=0;i<n-1;i++)
        {
            for(j=0;j<n-i-1;j++)
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
} 

结果是正确的
2 3 4 6 7 8 5 1 9 0
6356692 6356696 6356700 6356704 6356708 6356712 6356716 6356720 6356724 6356728
0 1 2 3 4 5 6 7 8 9

  1. 你print的都是地址, 不是值
  2. 能看出来你想用冒泡排序, 但是i和j反了