我在看一些C++代碼,如下所示:這是什麼指針增值業務實現這裏
char* foo = strchr(sStr, '\t');
if (foo)
{
*foo++ = '\0';
/* more code */
}
我猜想是不是需要更多的背景 - 我知道,第一行是初始化一個指向sStr
中第一個出現的指針。雖然我不完全確定*foo++ = '\0';
在做什麼。
我在看一些C++代碼,如下所示:這是什麼指針增值業務實現這裏
char* foo = strchr(sStr, '\t');
if (foo)
{
*foo++ = '\0';
/* more code */
}
我猜想是不是需要更多的背景 - 我知道,第一行是初始化一個指向sStr
中第一個出現的指針。雖然我不完全確定*foo++ = '\0';
在做什麼。
這條線:
*foo++ = '\0';
設置一個foo
點的值'\0'
(空字符),並且隨後移動指針,以便它指向下一個字符的字符。它相當於:
*foo = '\0';
foo = foo + 1;
這是「訪問數組元素並前進到下一個元素」的標準咒語。它直接類似於像foo[i++]
這樣的迭代遍歷數組。
表達本身解析作爲
*(foo++) = '\0';
foo++
手段「增量FOO,但在這個表達式中使用它的電流值」。因此,該表達式將'\0'
分配給char
對象,foo
是當前指向並前進foo
指向下一個元素。
以前的答案是正確的:foo
指向一個選項卡sStr
,太行*foo++ = '\0';
替換選項卡以NUL和墊款foo
指向下一個字符。
您可能會這樣做的原因是將一行文本解析爲製表符分隔的字段。如果/* more code */
沒有這樣做(即,記錄指向字段開始的指針,並通過用NUL替換標籤來分隔它們),我會感到驚訝。