我有以下結構定義:
typedef struct S_t S_t;
struct S_t {
float *s_ptr;
uint32_t ns;
};
typedef struct p_t p_t;
struct p_t {
int32_t pID;
float pVal;
};
typedef struct pr_t pr_t;
struct pr_t {
S_t *S;
int (*TrimS)(S_t *TS, int sSize);
p_t *TP;
};
我還定義了以下函式:
int success = 0;
int failure = -1;
int ChopS(S_t *TS, int size)
{
int i, c;
for(i = 0; i < TS->ns; i )
{
if (i >= size)
TS->s_ptr[i] = 0.0;
}
c = 0;
for(i = 0; i < TS->ns; i )
{
if(TS->s_ptr[i] == 0.0)
c ;
}
if (c == size)
return success;
else
return failure;
}
我執行以下操作(此處為完整代碼)為 type 的每個成員分配值pr_t
,其中一個成員是TrimS
狀態標志函式指標:
p_t *p2 = NULL;
S_t *tS2 = NULL;
tS2 = malloc(sizeof(S_t));
pr_t *SP2 = NULL;
SP2 = malloc(sizeof(pr_t));
p2 = (p_t *) malloc(sizeof(p_t));
SP2->S = tS2;
SP2->TP = p2;
SP2->TrimS = ChopS;
SP2->TrimS(tS2, 8);
如果我嘗試使用 訪問標志的值SP2->TrimS
,我會得到一個垃圾值(或我認為的地址值),但不是0
或-1
如我所料。這里到底發生了什么?如何訪問 in 設定的ChopS
值SP2->TrimS
?
uj5u.com熱心網友回復:
您需要呼叫該函式來獲取回傳值。它不存盤在任何地方,并且函式指標不存盤最后一個回傳值。將其用作任何“正常”功能
if(SP2->TrimS(tS2, 8) == failure)
{
/* do something */
}
else
{
/* do something else */
}
或者如果您想稍后訪問它(在呼叫之后),您需要將它存盤在變數中或有一個額外的結構成員來存盤它:
struct pr_t {
S_t *S;
int (*TrimS)(S_t *, int);
int last_TrimS_Return_Value;
p_t *TP;
};
/* .... */
SP2 -> last_TrimS_Return_Value = SP2->TrimS(tS2, 8);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/496561.html
下一篇:回圈似乎正在修改Go中的變數