[英]Pointer and char array confusion
#include <iostream>
using namespace std;
int main()
{
char str[] {"TESTING"};
char *p {str};
cout << (p++, *++p);
cout << *p++;
cout << p;
return 0;
}
返回“ SSTING”
我知道這篇文章可能不完全適用於stackoverflow,但我無法弄清楚它的作用,也找不到有關它的任何文檔。
cout << (p++, *++p);
第一次看到cout中帶有逗號的圓括號...它們的功能是什么?
並且不應該只在這行說“ TESTING”,但似乎只說TING
cout << p;
謝謝!
讓我們逐行進行:
char str[] {"TESTING"};
該行定義了一個名為str
的變量,其類型數組為8個字符 ,並使用字符TESTING
加上NUL字符對其進行初始化以標記結尾。
char *p {str};
這個變量定義了一個名為p
的類型為char的類型指針的變量,並將其初始化為數組str
的第一個char(第一個T
)的地址。 發生這種情況是因為在大多數情況下,數組會自動衰減為指針。
cout << (p++, *++p);
這條線可以做幾件事。 ,
運算符首先計算左側運算符p++
,該運算符使指針遞增,現在指向E
; 然后它計算右手運算符*++p
,但這是一個預遞增運算符,因此它將再次增加指針(它指向S
)。 最后, *
運算符訪問p
指向的內存,結果為S
並將該字符打印到STDOUT中。
cout << *p++;
這很容易。 *
運算符訪問由p
指向的字符(再次為S
)並將其打印在STDOUT中。 然后,它遞增指針,因為它是后遞增運算符。 現在它指向第二個T
cout << p;
至少,此行打印p
指向的字符串,直到找到NUL字符為止。 由於p
指向數組的第二個T
,它將顯示TING
。
將所有這些輸出放在一起,就可以得到SSTING
。
不完全是答案,而是代碼的功能細分,
#include <iostream>
using namespace std;
int main()
{
char str[]{"TESTING"};
char *p{str}; // p points to: 'T'
p++; // p points to: 'E'
++p; // p points to: 'S'
cout << *p; // output a single char: 'S'
cout << *p; // ouptut a single char: 'S'
p++; // p points to: 'T'
cout << p; // output a (char *) type pointer, AKA a C-string, "TING";
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.