char a[]="helloworld";
如何獲取字符串中特定元素的地址
我想獲取'l'的地址嗎?
(a+2)
或&a[2]
給出lloworld。並添加其他&符號顯示錯誤。
那麼如何獲得'l'的地址?
如果不行,請解釋一下?
char a[]="helloworld";
如何獲取字符串中特定元素的地址
我想獲取'l'的地址嗎?
(a+2)
或&a[2]
給出lloworld。並添加其他&符號顯示錯誤。
那麼如何獲得'l'的地址?
如果不行,請解釋一下?
兩者都是正確的,但如果你想輸出的時候你就會不得不要麼:
爲C:使用(C)以適當的格式字符串: printf("address: %p\n", &a[2]);
爲C++:避免COUT串解譯通過強制轉換爲void*
: cout << "address: " << static_cast<void*>(&a[2]) << endl;
+1對於成功的問題解釋。 –
thnx buddy..i wanted 4 C++ ... – vijay
-1 C中地址的正確print-formatspecifier是%p不是你的%x – user411313
a + 2
是數組中第三個元素的地址,它是第一個l
的地址。
在該表達式中,a
,這是char[11]
類型的,被隱式轉換爲指針到它的初始元素,得到char*
類型的指針,向其中加入2
,給數組的第三個元素的地址。
&a[2]
給出了相同的結果。 a[2]
相當於*(a + 2)
,因此完整表達式相當於&*(a + 2)
。 &
和*
相互抵消,留下a + 2
,與上面相同。
如何在您的程序中解釋此地址是另一回事。您可以將其用作「指向單個對象的指針」,在這種情況下,它只是指向第一個l
的指針。但是,您也可以將其解釋爲「指向指向char
的陣列中包含的C字符串的指針,在這種情況下您得到"lloworld"
。這取決於您獲取它後如何使用指針。
在C中,我們可以通過printf獲得da地址(「%d」,&a [2])和'lloworld'由printf(「%s」,&a [2])..但是因爲在C++中,我們只有cout默認情況下需要string(wat編譯器顯示)..所以如何獲取地址 – vijay
@Vj,是什麼讓你認爲你在C++中只有'cout'?你在cstdio頭部有'printf'。並且該代碼不是*獲取地址。該代碼是*打印*地址。你已經*得到*你的地址和你所顯示的每個人的代碼:'a + 2'或'&a [2]'。您的問題在於打印該值,使其看起來像地址。 –
@RobKennedy ya同意wid:... :) – vijay
strchr
將返回。指向(地址)的字符串中第一次出現給定字符。
你是什麼意思,放棄'lloworld'。如果您將它用作C字符串,它仍然會以null結尾。在句子中進一步開始。
在C++中,cout <<&a [2]在默認情況下在2個元素之後輸出整個字符串..在C中,它的nt a prblm ...因此,要獲取特定地址C++中的字符串中的元素,它不能由&a [2]完成...然後wats da way? – vijay
你有地址 - 'char *'。 'cout'將它用作字符串。你想要原始地址 - 然後將其轉換爲void *'。 –
我想你'輸出它:使用'static_cast(&a [2])'作爲地址輸出。如果是這樣,它可能是這樣的重複:http://stackoverflow.com/questions/10817278/why-no-output-is-displaying/ –
chris