lun1ght 2024-03-19 18:13 采纳率: 75%
浏览 4
已结题

请问为什么主函数输出的不是整形数组a里面的数值


#include <stdio.h>
int main()
{
    int **p(void),**p1;
    p1=p();
    int i;
    for(i=0;i<3;i++)
        printf("%d ",*(p1[i]));
    return 0;
}

int **p(void)
{
    int a[3]={1,2,3},*p[3]={&a[0],&a[1],&a[2]},**p2;
    p2=p;
    return p2;
}

img

  • 写回答

4条回答 默认 最新

  • qzjhjxj 2024-03-19 21:45
    关注

    因为 int a[3]={1,2,3},*p[3]={&a[0],&a[1],&a[2]},**p2; 都是函数里的局部变量,函数调用执行完后,都被从内存里释放了,所以再输出时就出错了,只要在函数里将这些变量设置为静态变量即可,修改如下,供参考:

    #include <stdio.h>
    int main()
    {
        int** p(void), ** p1;
        p1 = p();
        int i;
        for (i = 0; i < 3; i++)
            printf("%d ", *(p1[i]));
        return 0;
    }
    
    int** p(void)
    {
        static int a[3] = { 1,2,3 }, * p[3] = { &a[0],&a[1],&a[2] }, ** p2; // 修改
        p2 = p;
        return p2;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月19日
  • 已采纳回答 3月19日
  • 创建了问题 3月19日