[英]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.