永发信息网

c语言 指针 排大小问题

答案:4  悬赏:30  手机版
解决时间 2021-08-24 13:49
  • 提问者网友:欲劫无渡
  • 2021-08-23 13:21

#include<stdio.h>
# define n 5
void main()
{
int sum,i,*p,k,temp;
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
p=a;
for(i=0;i<n;i++,p++)
for(k=i+1;k<n;k++)
{
     if(*(p+i)>*(p+k))
     temp=*(p+i);
     *(p+i)=*(p+k);
 *(p+k)=temp;
}
for(i=0;i<n;i++)
printf("%d",*(p+i));

}

帮忙解释一下  哪里写错了??

最佳答案
  • 五星知识达人网友:平生事
  • 2021-08-23 14:37

// 指针归位问题:


#include<stdio.h>
# define n 5


void main()
{
 int sum,i,*p,k,temp;
 int a[n];
 for(i=0;i<n;i++)
  scanf("%d",&a[i]);
 
 for(i=0;i<n;i++)
 {
  p=a;
  for(k=i+1;k<n;k++)
  {
   if( *(p+i)>*(p+k) )
   {
    temp=*(p+i);
    *(p+i)=*(p+k);
    *(p+k)=temp;
   }
  }
  p++;
 }
 p=a;
 for(i=0;i<n;i++)
  printf("%d  ",a[i]);
 
}


注意上面加黑的那几个部分。


// 测试结果:


全部回答
  • 1楼网友:等灯
  • 2021-08-23 17:12
for(i=0;i<n;i++,p++) 要注意 此时你进行了p++的操作,那么p已经不再是指向a的首地址了
  • 2楼网友:末日狂欢
  • 2021-08-23 15:52
#include <stdio.h> void main() {  int data[10];       int i,j,temp;   printf("Please input 10 numbers: \n");   for(i=0;i<10;i++)    scanf("%d",&data[i]);   for(i=0;i<10-1;i++)    for(j=0;j<9-i;j++)     if(data[j]>data[j+1])     {     temp=data[j];     data[j]=data[j+1];     data[j+1]=temp;     };     printf("\nthe result of sort: \n");     for(i=0;i<10;i++)     printf("% d",data[i]);  while(1); }
  • 3楼网友:封刀令
  • 2021-08-23 15:07

#include<stdio.h> #define n 5 int main() { int sum,i,*p,k,temp; int a[n]; for(i=0;i<n;i++) scanf("%d",&a[i]); p=a; for(i=0;i<n;i++) for(k=0;k<n-1-i;k++) {     if(*(p+k)>*(p+k+1))     temp=*(p+k);     *(p+k)=*(p+k+1);     *(p+k+1)=temp; } for(i=0;i<n;i++) printf("%d",*(p+i));

}

首先是第二个for你错了

你用的是冒泡排序~~~

并且在第一个for中p不应该++;

因为这个操作*(p+k)就相当于a[k];如果你执行p++后,就相当于a[k+1]了;

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯