gpt4 book ai didi

c - 将双指针传递给另一个函数

转载 作者:行者123 更新时间:2023-11-30 17:03:10 25 4
gpt4 key购买 nike

我正在努力解决如何传递指针以便能够根据主函数中的头搜索链表。它是一个包含多项式系数和指数的结构。在 allocateTerm 函数中,我尝试将双指针传递给另一个函数来搜索并查看我要创建的项是否已在多项式中具有公共(public)项。代码如下:

typedef struct PolyTerm{
int iCoeff;
int iExp;
struct PolyTerm *pNext;
}PolyTerm;

PolyTerm *allocateTerm(int iCoeff, int iExp, PolyTerm **ppHead, PolyTerm *pCurr);
PolyTerm *findTerm(int iCoeff, int iExp, PolyTerm ***ppHead);

void main(int argc, char *argv[])
{
PolyTerm *pPolyAHead = NULL;
PolyTerm *pCurr = NULL;

allocateTerm(2,3,&pPolyAHead, pCurr);
pCurr = allocateTerm(3,4,&pPolyAHead, pCurr);
pCurr = allocateTerm(4,5,&pPolyAHead, pCurr);
pCurr = allocateTerm(5,6,&pPolyAHead, pCurr);

printf("%p\n", pPolyAHead);

for(pCurr = pPolyAHead; pCurr != NULL; pCurr=pCurr->pNext)
printf("coeff: %d exp: %d address: %p\n", pCurr->iCoeff, pCurr->iExp, pCurr);

PolyTerm *pPolyBHead = NULL;

allocateTerm(7,8,&pPolyBHead, pCurr);
pCurr = allocateTerm(9,10,&pPolyBHead, pCurr);
pCurr = allocateTerm(11,12,&pPolyBHead, pCurr);
pCurr = allocateTerm(13,14,&pPolyBHead, pCurr);

for(pCurr = pPolyBHead; pCurr != NULL; pCurr=pCurr->pNext)
printf("coeff: %d exp: %d address: %p\n", pCurr->iCoeff, pCurr->iExp, pCurr);

}

PolyTerm *allocateTerm(int iCoeff, int iExp, PolyTerm **ppHead, PolyTerm *pCurr)
{
PolyTerm *pFind = NULL;
if(*ppHead == NULL)
{
*ppHead = (PolyTerm *)malloc(sizeof(PolyTerm));
if(*ppHead == NULL)
{
printf("Memory allocation error with ppHead\n");
}
(*ppHead)->iCoeff = iCoeff;
(*ppHead)->iExp = iExp;
(*ppHead)->pNext = NULL;
}
else
{
// Search to see if that exponent already exists
printf("%p\n", *ppHead);
pFind = findTerm(iCoeff, iExp, /*????? (some form of **pHead)*/);
if(pFind == NULL)
{
PolyTerm *pNew = NULL;
pNew = (PolyTerm *)malloc(sizeof(PolyTerm));
if(pNew == NULL)
printf("Memory allocation error with pNew\n");
if((*ppHead)->pNext == NULL)
{
(*ppHead)->pNext = pNew;
}
else
{
pCurr->pNext = pNew;
}
pNew->iCoeff = iCoeff;
pNew->iExp = iExp;
pNew->pNext = NULL;
}
else
{
pFind->iCoeff += iCoeff;
}
}
}

PolyTerm *findTerm(int iCoeff, int iExp, PolyTerm ?????/*????? (some form of **pHead)*/)
{
//printf("%p", &head);
/*
PolyTerm *pFind = NULL;
for(pFind = (*ppHead); pFind != NULL; pFind = (*ppHead)->pNext)
{
if(pFind->iExp == iExp)
return pFind;
}
return NULL;*/
}

最佳答案

我对你的函数做了一些修改,我不确定到底是哪些修改,但大部分原始语法都完好无损。我相信下面的代码能够实现您所追求的目标。如有遗漏请留言。

#include<stdlib.h>
#include<stdio.h>

typedef struct PolyTerm{
int iCoeff;
int iExp;
struct PolyTerm *pNext;
}PolyTerm;

PolyTerm *allocateTerm(int iCoeff, int iExp, PolyTerm **ppHead, PolyTerm *pCurr);
PolyTerm *findTerm(int iCoeff, int iExp, PolyTerm **ppHead);

void main(int argc, char *argv[])
{
setbuf(stdout, NULL);

PolyTerm *pPolyAHead = NULL;
PolyTerm *pCurr = NULL;

pCurr = allocateTerm(2,3,&pPolyAHead, pCurr);
//printf("%d %d %p %p\n",pCurr->iCoeff,pCurr->iExp,pPolyAHead,pCurr->pNext);
pCurr = allocateTerm(3,4,&pPolyAHead, pCurr);
//printf("%d %d %p\n",pCurr->iCoeff,pCurr->iExp,pCurr->pNext);
pCurr = allocateTerm(4,5,&pPolyAHead, pCurr);
pCurr = allocateTerm(5,6,&pPolyAHead, pCurr);

//printf("main: %p\n", pPolyAHead);

for(pCurr = pPolyAHead; pCurr != NULL; pCurr=pCurr->pNext)
printf("coeff: %d exp: %d address: %p\n", pCurr->iCoeff, pCurr->iExp, pCurr);

//exit(1);

PolyTerm *pPolyBHead = NULL;

allocateTerm(7,8,&pPolyBHead, pCurr);
pCurr = allocateTerm(9,10,&pPolyBHead, pCurr);
pCurr = allocateTerm(11,12,&pPolyBHead, pCurr);
pCurr = allocateTerm(13,14,&pPolyBHead, pCurr);

for(pCurr = pPolyBHead; pCurr != NULL; pCurr=pCurr->pNext)
printf("coeff: %d exp: %d address: %p\n", pCurr->iCoeff, pCurr->iExp, pCurr);

}

PolyTerm *allocateTerm(int iCoeff, int iExp, PolyTerm **ppHead, PolyTerm *pCurr)
{
PolyTerm *pFind = NULL;
if(*ppHead == NULL) {
// Occurs only on first entry.
*ppHead = (PolyTerm *)malloc(sizeof(PolyTerm));
if(*ppHead == NULL)
printf("Memory allocation error with ppHead\n");

(*ppHead)->iCoeff = iCoeff;
(*ppHead)->iExp = iExp;
(*ppHead)->pNext = NULL;
return *ppHead;
} else {
// Search to see if that exponent already exists
//printf("allocate: %p\n", *ppHead);
pFind = findTerm(iCoeff, iExp, ppHead);
if(pFind == NULL) {
PolyTerm *pNew = NULL;
pNew = (PolyTerm *)malloc(sizeof(PolyTerm));
if(pNew == NULL)
printf("Memory allocation error with pNew\n");

if((*ppHead)->pNext == NULL)
(*ppHead)->pNext = pNew;
else
pCurr->pNext = pNew;

pNew->iCoeff = iCoeff;
pNew->iExp = iExp;
pNew->pNext = NULL;
} else {
pFind->iCoeff += iCoeff;
}
}
}

PolyTerm *findTerm(int iCoeff, int iExp, PolyTerm **ppHead)
{
//printf("find: %p\n", *ppHead);

PolyTerm *pFind;
for(pFind = *ppHead; pFind->pNext != NULL; pFind = pFind->pNext) {
//printf("find: iExp %d %d\n",pFind->iExp, iExp);
if(pFind->iExp == iExp) {
//printf("find: returned\n");
return pFind;
}
}
//printf("find: not found\n");
return NULL;
}

输出:

coeff: 2 exp: 3 address: 001B1C28
coeff: 3 exp: 4 address: 001B1C40
coeff: 4 exp: 5 address: 001B1C58
coeff: 5 exp: 6 address: 001B1C70
coeff: 7 exp: 8 address: 001B1668
coeff: 9 exp: 10 address: 001B1680
coeff: 11 exp: 12 address: 001B1698
coeff: 13 exp: 14 address: 001B16B0

关于c - 将双指针传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36254157/

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