c - 如何在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** 类型期间变成那个值?谢谢!
解决方案
推荐阅读
- scala - 如何使用`flatMap`实现延迟计算的成本估算?
- java - 从地图中的对象中删除某些元素
- javascript - 在 C# 中删除一个字符
- mysql - How can I reinstall mysql while restoring DBs without mysqldump?
- image - Vue omitting images and assets in production build
- c# - .NET Core SQLite '数据库已锁定'仅在 Linux 上
- c# - How to use Conditional Compilation in Windows Universal App
- sql - 如何从数据库中仅获取更新的行并使应用程序更高效
- javascript - How does this object initialization work, for props?
- r - How do I find percentage for a variable in a data frame?