0

char a[]="helloworld";

我想得到'l'的地址?

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

那么如何获取'l'的地址呢?

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

4

5 回答 5

7

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

在这个表达式中,a类型为 的char[11],被隐式转换为指向其初始元素的指针,产生一个类型为 的指针,添加char*到该指针中2,给出数组第三个元素的地址。

&a[2]给出相同的结果。 a[2]等价于*(a + 2),所以完整的表达式等价于&*(a + 2)。和&相互*抵消,留下a + 2,同上。

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

于 2012-06-01T16:14:51.043 回答
3

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

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

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

于 2012-06-01T16:20:04.317 回答
0

我想你想要strchr

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

这将指向l. 您可以printf使用%p描述符打印它。

于 2012-06-01T16:16:09.480 回答
0

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

于 2012-06-01T16:16:31.760 回答
0

你是什​​么意思它放弃了'lloworld'。如果将它用作 C 字符串,它仍然会以 null 结尾。只是在句子中进一步开始。

于 2012-06-01T16:18:16.767 回答