C指向指针的指针,进行10个整数排序? 400 报错 #include <stdio.h>
#include <stdlib.h>
void pointer(int p);
int main()
{
int a[10];
int i;
int *pa[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
pa[i]=&a[i];
}
pointer(pa);
for(i=0;i<10;i++)
{
printf("%d\n",(pa+i));
}
return 0;
}
void pointer(int p)
{
int i,j,*temp;
for(i=0;i<9;i++)
{
for(j=0;j<10-i;j++)
{
if((p+j)>**(p+j+1))
{
temp=*(p+j);
(p+j)=(p+j+1);
*(p+j+1)=temp;
}
}
}
}
看看pointer函数里面:
当i = 0;j < (10 - i = 10);也就是j可以等于9,假如j = 9;那么**(p+j+1)就为**(p+10),越界了。要修改的话把for j循环改为:
for(j=0;j<10-i-1;j++)就可以了
#include <stdio.h> #include <stdlib.h> void pointer(int **p); int main(int argc, char *argv[]) { int a[10]; int i; int *pa[10]; for (i = 0; i < 10; i++) { scanf("%d",&a[i]); pa[i] = &a[i]; } pointer(pa); for (i = 0; i < 10; i++) { printf("%d\n",*pa[i]); } return 0; } void pointer(int **p) { int i, j, temp; for(i = 0; i < 10 - 1; i++) { for(j = 0; j < 10 - i - 1; j++) { if(*p[j + 1] < *p[j]) { temp = *p[j]; *p[j]= *p[j + 1]; *p[j + 1] = temp; } } } }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。