簡體   English   中英

保存另一個函數的指針地址

[英]save pointer address from another function

我有一個函數,該函數接收一個指向char數組的指針。 該函數遞增指針,使其在數組中遍歷n個長度。 最后,該函數返回一個int,它表示某些狀態。 問題是我還有其他函數也收到指向相同char數組的指針,因此他們需要從另一個函數停止的地方開始精確遍歷它。 所以我需要以某種方式保存指針的地址。 我無法返回指針,因為該函數返回int。 我想知道我是否仍然可以以某種方式實現這一目標,或者我需要使用結構來保存幾種數據類型(int和指針地址)。

這是此類函數的示例:

int func(char *p) {
    while(*p != 's')
       p++;
    return (*p == 's') ? 1 : -1
}

恐怕您必須使用雙指針。 通過將參數更改為char **(在這種情況下,該函數看起來會更難看),或者添加類型為char **的新“ out”參數,這是指針的地址,其中指針將被存儲-模擬另一種返回值。

這是第一個選擇:

int func(char **p) {
    while (**p != 's')
        ++*p;
    return **p == 's' ? 1 : -1;
}

您可以編輯指針:

// The ** means a pointer to a pointer, you can now edit the pointer.
int func(char **p) {
    // Mauybe check for the end of the string here as well.
    while(*(*p) != 's') {
       // We dereference our pointer and edit it here.
       (*p)++;
    }
    return (*(*p) == 's') ? 1 : -1
}

在此函數結束時,您的p將指向循環停止的位置。 您可以這樣稱呼它:

char *p = someString;
int myInt = func(&p);

如果函數簽名是固定的,那么在不使用全局或第二個函數“重新找到”該位置的相同循環的情況下是不可能的。

您可以返回包含狀態和指針的結構,也可以創建全局指針

指針的指針如何:

int func(char **p) {
    while(**p != 's')
       (*p)++;
    return (**p == 's') ? 1 : -1;
}

您可以使用以下方式調用它:

func(&pointer);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM