首页 > 解决方案 > 如何在c中动态初始化结构数组

问题描述

现在我要做的是在函数findP中返回一个指向结构数组的指针,我的代码如下:

typedef struct Pair Pair;
struct Pair {
    long long first;
    long long snd;
};
Pair constStr(long long first, long long snd)
{
    Pair pair;
    pair.first = first;
    pair.snd = snd;
    return pair;
}

Pair** findP(long long n) 
{
    int len = 0;
    struct Pair iPair[100];

    for (long long i = 1; i <= n; i++)
    {
        for (long long j = 1; j <= n; j++)
        {
            if (i * j + i + j == (n * n + n) / 2 && i != j)
            {
                Pair p = constStr(i, j);
                iPair[len] = p;
                len++;

            }
        }
    }

    Pair** iPPtr = malloc(len * sizeof(Pair*));
    iPPtr = iPair;   
    if (len > 0)
    {
        for (int i = 0; i < len; i++)
        {            
            iPPtr[i] = &iPair[i];
            printf("first %d and second %d.", iPPtr[i]->first, iPPtr[i]->snd);
        }
    }
    return iPPtr;
}

我要做的是首先创建一个包含“len”结构的struct iPair数组(len是根据输入n计算的)并将其传递给Pair** iPPtr。结果,在 n = 26 的情况下,len = 2,在 iPair 中创建的第一个结构应该是 P1.first = 15,P1.snd = 21,第二个结构 p2.first = 21,p2.snd =15。然而,在传递给 iPPtr 之后,第一个结构的第一个值变成了地址(例如 p1.first = 1842452398400)。任何人都可以给我一个提示,为什么会这样?为什么第一个结构的第一个值在传递给 Pair** 类型期间变成那个值?谢谢!

标签: c

解决方案


推荐阅读