2012-06-01 43 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 *'。 –

相关问题