2012-06-01 41 views
0

char a[]="helloworld";如何獲取字符串中特定元素的地址

我想獲取'l'的地址嗎?

(a+2)&a[2]給出lloworld。並添加其他&符號顯示錯誤。

那麼如何獲得'l'的地址?

如果不行,請解釋一下?

+3

我想你'輸出它:使用'static_cast (&a [2])'作爲地址輸出。如果是這樣,它可能是這樣的重複:http://stackoverflow.com/questions/10817278/why-no-output-is-displaying/ – chris

回答

3

兩者都是正確的,但如果你想輸出的時候你就會不得不要麼:

  • 爲C:使用(C)以適當的格式字符串: printf("address: %p\n", &a[2]);

  • 爲C++:避免​​COUT串解譯通過強制轉換爲void*cout << "address: " << static_cast<void*>(&a[2]) << endl;

+0

+1對於成功的問題解釋。 –

+0

thnx buddy..i wanted 4 C++ ... – vijay

+0

-1 C中地址的正確print-formatspecifier是%p不是你的%x – user411313

7

a + 2是數組中第三個元素的地址,它是第一個l的地址。

在該表達式中,a,這是char[11]類型的,被隱式轉換爲指針到它的初始元素,得到char*類型的指針,向其中加入2,給數組的第三個元素的地址。

&a[2]給出了相同的結果。 a[2]相當於*(a + 2),因此完整表達式相當於&*(a + 2)&*相互抵消,留下a + 2,與上面相同。

如何在您的程序中解釋此地址是另一回事。您可以將其用作「指向單個對象的指針」,在這種情況下,它只是指向第一個l的指針。但是,您也可以將其解釋爲「指向指向char的陣列中包含的C字符串的指針,在這種情況下您得到"lloworld"。這取決於您獲取它後如何使用指針。

+0

在C中,我們可以通過printf獲得da地址(「%d」,&a [2])和'lloworld'由printf(「%s」,&a [2])..但是因爲在C++中,我們只有cout默認情況下需要string(wat編譯器顯示)..所以如何獲取地址 – vijay

+0

@Vj,是什麼讓你認爲你在C++中只有'cout'?你在cstdio頭部有'printf'。並且該代碼不是*獲取地址。該代碼是*打印*地址。你已經*得到*你的地址和你所顯示的每個人的代碼:'a + 2'或'&a [2]'。您的問題在於打印該值,使其看起來像地址。 –

+0

@RobKennedy ya同意wid:... :) – vijay

0

我想你想要strchr

char *lAddress = strchr(a, 'l'); 

這將指向l開始 可以使用printf使用%p描述打印此

0

strchr將返回。指向(地址)的字符串中第一次出現給定字符。

0

你是什麼意思,放棄'lloworld'。如果您將它用作C字符串,它仍然會以null結尾。在句子中進一步開始。

+0

在C++中,cout <<&a [2]在默認情況下在2個元素之後輸出整個字符串..在C中,它的nt a prblm ...因此,要獲取特定地址C++中的字符串中的元素,它不能由&a [2]完成...然後wats da way? – vijay

+0

你有地址 - 'char *'。 'cout'將它用作字符串。你想要原始地址 - 然後將其轉換爲void *'。 –

相關問題