user-0 提问: C 语言问题，求大神指导

回复:
user: user-0
content: 引用 1 楼 litao31415 的回复:楼主希望实现冒泡排序，但该程序有多处错误  麻烦大大指出错误在哪儿，求大神指导

user: user-1
content: 楼主希望实现冒泡排序，但该程序有多处错误

user: user-0
content: 引用 5 楼 user-2 的回复: #include <stdio.h> #include <malloc.h>   void input(int *,int); void sort(int *,int); void output(int *,int); void main() {     int *p = NULL;                    //指向空的記憶體位置     int len = 0,i = 0;       printf("請輸入長度：\nlenth = ");       scanf("%d",&len);           p = (int *)malloc(len * sizeof(int)); //動態配置記憶體       input(p,len);       sort(p,len);       output(p,len);   }  void input(int * p, int len) {     int i = 0;     for(i=0;i<len;i++)     {         printf("請為第%d個數組元素賦值:\np[%d] = ",i+1, i); 		scanf("%d",&p[i]);     } }  void sort(int * pArr, int len) {     int i,j,k; 	for(j=len-1;j>=0;j--) 	{         for(i=0;i<j;i++)         {             if(*(pArr+i) > *(pArr+i+1))             {                 k = *(pArr+i);                 *(pArr+i) = *(pArr+i+1);                 *(pArr+i+1) = k;             }         } 	}   }   void output(int * p,int len) {     int i; 	printf("After sort: \n");     for(i=0;i<len;i++)     {         printf("p[%d] = %d\n", i,p[i]);     } }    感谢大神指导，谢谢

user: user-2
content: #include <stdio.h> #include <malloc.h>   void input(int *,int); void sort(int *,int); void output(int *,int); void main() {     int *p = NULL;                    //指向空的記憶體位置     int len = 0,i = 0;       printf("請輸入長度：\nlenth = ");       scanf("%d",&len);           p = (int *)malloc(len * sizeof(int)); //動態配置記憶體       input(p,len);       sort(p,len);       output(p,len);   }  void input(int * p, int len) {     int i = 0;     for(i=0;i<len;i++)     {         printf("請為第%d個數組元素賦值:\np[%d] = ",i+1, i); 		scanf("%d",&p[i]);     } }  void sort(int * pArr, int len) {     int i,j,k; 	for(j=len-1;j>=0;j--) 	{         for(i=0;i<j;i++)         {             if(*(pArr+i) > *(pArr+i+1))             {                 k = *(pArr+i);                 *(pArr+i) = *(pArr+i+1);                 *(pArr+i+1) = k;             }         } 	}   }   void output(int * p,int len) {     int i; 	printf("After sort: \n");     for(i=0;i<len;i++)     {         printf("p[%d] = %d\n", i,p[i]);     } }

user: user-0
content: 引用 3 楼 litao31415 的回复:1.分清楚指向数组的指针和指向数组内部元素的指针，scanf("%d",p[i]);应改正为scanf("%d",&p[i]); 2.for(i=0;i<len-1;i++)         for(j=0;j<len-1-i;j++)             {                 if(*(pArr+i) > *(pArr+i+1))             {                 k = *(pArr+i);                 *(pArr+i) = *(pArr+i+1);                 *(pArr+i+1) = k;             }              } 应该改为： for(i=0;i<len-1;i++)         for(j=i;j<len-1;j++)//修改             {          if(*(pArr+j) > *(pArr+j+1))             {                 k = *(pArr+j);// i修改为j                 *(pArr+j) = *(pArr+j+1);// i修改为j                 *(pArr+j+1) = k;// i修改为j             }              } 才符合逻辑。 3.还有显示时最好加空格或者换行才能区分出具体数据  感谢大神，成功了，都是一些初级错误，唉！惭愧，我愣是半天都没找到

user: user-1
content: 1.分清楚指向数组的指针和指向数组内部元素的指针，scanf("%d",p[i]);应改正为scanf("%d",&p[i]); 2.for(i=0;i<len-1;i++)         for(j=0;j<len-1-i;j++)             {                 if(*(pArr+i) > *(pArr+i+1))             {                 k = *(pArr+i);                 *(pArr+i) = *(pArr+i+1);                 *(pArr+i+1) = k;             }              } 应该改为： for(i=0;i<len-1;i++)         for(j=i;j<len-1;j++)//修改             {          if(*(pArr+j) > *(pArr+j+1))             {                 k = *(pArr+j);// i修改为j                 *(pArr+j) = *(pArr+j+1);// i修改为j                 *(pArr+j+1) = k;// i修改为j             }              } 才符合逻辑。 3.还有显示时最好加空格或者换行才能区分出具体数据