如何获取字符串中特定元素的地址

时间:2012-06-01 16:13:27

标签: c++ c string

char a[]="helloworld";

我想得到'我'的地址?

(a+2)&a[2]提供 lloworld 。并添加其他&符显示错误。

然后如何获得'l'的地址?

如果不可能,请解释一下?

5 个答案:

答案 0 :(得分:7)

a + 2是数组中第三个元素的地址,它是第一个l的地址。

在此表达式中,类型为a的{​​{1}}被隐式转换为指向其初始元素的指针,从而产生char[11]类型的指针,{{1}添加,给出数组的第三个元素的地址。

char*给出相同的结果。 2相当于&a[2],因此完整表达式相当于a[2]*(a + 2)&*(a + 2)互相取消,留下&,与上述内容相同。

如何在您的程序中解释此地址是另一回事。您可以将它用作“指向单个*对象的指针”,在这种情况下,它只是指向第一个a + 2的指针。但是,您也可以将其解释为“指向从指向char开始的数组中包含的C字符串的指针,在这种情况下,您将获得l。这取决于您如何使用指针一旦你得到它。

答案 1 :(得分:3)

两者都是正确的,但如果你想输出它,你必须要么:

  • 对于C:使用适当的格式字符串(对于C): printf("address: %p\n", &a[2]);

  • for C ++:通过强制转换为void*来避免cout对字符串的解释: cout << "address: " << static_cast<void*>(&a[2]) << endl;

答案 2 :(得分:0)

我想你想要strchr

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

这将指向l的开头。 您可以使用printf描述符使用%p打印此内容。

答案 3 :(得分:0)

strchr将返回指向(地址)字符串中第一次出现给定字符的指针。

答案 4 :(得分:0)

你是什么意思放弃'lloworld'。如果您将它用作C字符串,它仍将被终止。在句子中再开始一点。