gpt4 book ai didi

c - 指向结构体元素的指针

转载 作者:行者123 更新时间:2023-11-30 15:47:04 25 4
gpt4 key购买 nike

我需要编写一个函数来对具有相同幂的单项求和,单体由以下结构定义:

typedef struct monom {
int coefficient;
int power;
}MONOM;

我从作业中编写的函数是:

int sumMonomsWithSamePower(MONOM** polynomial, int size)
{
int i, powerIndex = 0;

for (i = 0; i < size; i++)
{
if ((polynomial[powerIndex])->power == (polynomial[i])->power)
{
if (powerIndex != i)
(polynomial[powerIndex])->coefficient += (polynomial[i])->coefficient;

}

else
powerIndex++;
}

powerIndex++;
*polynomial = (MONOM*)realloc(polynomial, powerIndex);
return powerIndex;
}

通过以下调用调用它:

*polySize = sumMonomsWithSamePower(&polynomial, logSize);

多项式数组作为 MONOM 的排序数组发送到函数(按幂升序排序)。

我的问题是,在 sumMonomsWithSamePower() 的第 7 行,函数崩溃了,因为它无法通过以下方式查看数组中的元素。当我将数组的元素放入调试器中的Watch list时,我也无法使用多项式[i]看到它们,但如果我使用(多项式[0]+i),我可以看到它们清楚。

这是怎么回事?

最佳答案

我假设在 sumMonomsWithSamePower() 之外,您已使用 polynomial = malloc( size * sizeof(MONOM) ); (其他一切都与您的 realloc() 不一致)。因此,您有一个 MONOM 数组,并且 polynomial[1] 的内存位置为 polynomial[0] + sizeof(MONOM) 字节。

但是现在看看 sumMonomsWithSamePower() 中的 polynomial 在下面的段落中,我将用 ppoly (指向多项式的指针)重命名它以避免将其与原始数组混淆:这里它是一个 MONOM **,因此 ppoly[1] 寻址 sizeof(MONOM *) 字节内存位置 ppoly[0] + sizeof(MONOM *) 并将它们解释为指向 MONOM 结构的指针。但是您有一个结构数组,而不是指针数组。将您的表达式替换为 (*ppoly)[i].power (当然还有所有其他相应的表达式),该部分将起作用。顺便说一句,这正是您提到的两个调试器语句的区别。

此外,看看我关于使用 powerIndex 的评论

关于c - 指向结构体元素的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17748776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com