C 指向结构元素的指针
我需要写一个函数,用相同的幂和单项式, 单体由以下结构定义:C 指向结构元素的指针,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,我需要写一个函数,用相同的幂和单项式, 单体由以下结构定义: typedef struct monom { int coefficient; int power; }MONOM; 我在工作中写的功能是: int sumMonomsWithSamePower(MONOM** polynomial, int size) { int i, powerIndex = 0; for (i = 0; i < size; i++) {
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;
}
多项式数组作为单项式的排序数组(按幂升序排序)发送给函数
我的问题是,在的第7行callomswithsamepower()
函数崩溃,因为它无法通过以下方式查看数组中的元素。当我在调试器中将数组元素放入监视列表中时,我也无法使用多项式[I]看到它们,但如果使用(多项式[0]+I),我可以清楚地看到它们
这里发生了什么事?我假设在之外使用samepower()调用多项式
分配了类似多项式=malloc(size*sizeof(MONOM))代码>(其他一切都与您的realloc()
不一致)。所以你有一个单体数组,多项式[1]的内存位置是多项式[0]
+sizeof(单体)
字节
但是现在看一下多项式
在callomswithsamepower()
内存位置的字节ppoly[0]+sizeof(MONOM*)
并将它们解释为指向MONOM结构的指针。但是您有一个结构数组,而不是指针数组。用(*ppoly)[i]替换你的表达式。power
(当然还有其他所有相应的表达式),这部分就可以工作了。顺便说一下,这就是您提到的两个调试器语句的区别
此外,请看我关于使用powerIndex
的评论,您仍然不需要双指针,也不应该强制转换realloc()
@H2CO3的返回值,我还不知道,函数甚至没有得到realloc()
@H2CO3,我认为您的强制转换是错误的,因为realloc()
是一个void*
函数,我需要显式施法。@Quaker我不这么认为。每次你找到一个不同的幂,那么你就应该把powerIndex
设置为新的单体的索引,而不仅仅是++。或者,当你发现一个单子与之前的单子具有相同的功率时,你必须立即缩小你的数组。
*polySize = sumMonomsWithSamePower(&polynomial, logSize);