user-0 提问: 【C语言求助】用指针实现数字从小到大输出

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 4 楼 user-2的回复:q 这里记录的是数组的首地址，在for()循环里，p是往后走的，每循环一次p++一次，当第一轮内循环结束后，p就走到了数组的尾部地址了，我们需要它回到数组的首地址，然后重新开始新一轮的比较，以此类推。后面的输出语句前p=q，也是同样的道理。 嗷，原来是这样 谢谢啦！

user: user-2
content: q 这里记录的是数组的首地址，在for()循环里，p是往后走的，每循环一次p++一次，当第一轮内循环结束后，p就走到了数组的尾部地址了，我们需要它回到数组的首地址，然后重新开始新一轮的比较，以此类推。后面的输出语句前p=q，也是同样的道理。

user: user-0
content: 搞错了，是p＝q

user: user-0
content: 引用 1 楼 user-2的回复:供参考：#include <stdio.h> #include <math.h> void min_print(int *p,int n)//输入进来的是数组的储存地址 {     int tmp,i,j,*q=p; //------------------------------------------------ //  把数组的值从小到大赋给指针指向的值      for(i=0;i<n;i++)     {         p=q;         for(j=0;j<n-i-1;j++)//for(j=0;j<n-i;j++)         {             if(*p >= *(p+1))             {                 tmp=*p;                 *p=*(p+1);                 *(p+1)=tmp;                 //p++;             }                 //else if(*p<*(p+1))                 //{             p++;                 //}         }     }   // printf("%d %d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4)); //------------------------------------------------     p=q;     for(i=0;i<n;i++)     {         printf("%d ",*p);         p++;     } } //------------------------------------------------ void main() {     //输入数字的数目     int n;     printf("Please enter the number of digits:\n");     scanf("%d",&n);     //输入数组     int arr[n];       printf("Please enter %d numbers:\n",n);     for(int i=0;i<n;i++)     {         scanf("%d",&arr[i]);     }     getchar();       //把数组的地址给p     int *p;     p=arr;     //     //printf("*(p+1)=%d\n",*(p+2));     min_print(p,n);      system("pause"); }   //Please enter the number of digits: //5 //Please enter 5 numbers: //6 2 7 5 0 //0 2 5 6 7 请按任意键继续. . . 谢谢！ 请问为什么要有q＝p呢？

user: user-2
content: 供参考：#include <stdio.h> #include <math.h> void min_print(int *p,int n)//输入进来的是数组的储存地址 {     int tmp,i,j,*q=p; //------------------------------------------------ //  把数组的值从小到大赋给指针指向的值      for(i=0;i<n;i++)     {         p=q;         for(j=0;j<n-i-1;j++)//for(j=0;j<n-i;j++)         {             if(*p >= *(p+1))             {                 tmp=*p;                 *p=*(p+1);                 *(p+1)=tmp;                 //p++;             }                 //else if(*p<*(p+1))                 //{             p++;                 //}         }     }   // printf("%d %d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4)); //------------------------------------------------     p=q;     for(i=0;i<n;i++)     {         printf("%d ",*p);         p++;     } } //------------------------------------------------ void main() {     //输入数字的数目     int n;     printf("Please enter the number of digits:\n");     scanf("%d",&n);     //输入数组     int arr[n];       printf("Please enter %d numbers:\n",n);     for(int i=0;i<n;i++)     {         scanf("%d",&arr[i]);     }     getchar();       //把数组的地址给p     int *p;     p=arr;     //     //printf("*(p+1)=%d\n",*(p+2));     min_print(p,n);      system("pause"); }   //Please enter the number of digits: //5 //Please enter 5 numbers: //6 2 7 5 0 //0 2 5 6 7 请按任意键继续. . .