开发者社区> 问答> 正文

C指向指针的指针,进行10个整数排序? 400 报错

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;
            }
        }
    }

}


代码编译没有错误,但是运行出错。各位给分析一下,多谢!

展开
收起
爱吃鱼的程序员 2020-06-03 15:10:35 474 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    看看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;
                }
            }
        }
    }



    2020-06-03 16:43:31
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载