char a[]="helloworld";
我想得到'l'的地址?
(a+2)
或&a[2]
给出lloworld。并添加其他&符号显示错误。
那么如何获取'l'的地址呢?
如果不可能,请解释一下?
a + 2
是数组中第三个元素的地址,也就是第一个的地址l
。
在这个表达式中,a
类型为 的char[11]
,被隐式转换为指向其初始元素的指针,产生一个类型为 的指针,添加char*
到该指针中2
,给出数组第三个元素的地址。
&a[2]
给出相同的结果。 a[2]
等价于*(a + 2)
,所以完整的表达式等价于&*(a + 2)
。和&
相互*
抵消,留下a + 2
,同上。
在你的程序中如何解释这个地址是另一回事。您可以将其用作“指向单个char
对象的指针”,在这种情况下,它只是指向第一个l
. 但是,您也可以将其解释为“指向包含在数组中的 C 字符串的指针,该指针从指向的 开始char
,在这种情况下您会得到"lloworld"
。这取决于您在获得该指针后如何使用它。
两者都是正确的,但如果你想输出它,你必须:
对于 C:使用适当的格式字符串(对于 C):
printf("address: %p\n", &a[2]);
对于 C++:通过强制转换为 a 来避免 cout 的字符串解释void*
:
cout << "address: " << static_cast<void*>(&a[2]) << endl;
strchr
将返回一个指针,指向(地址)字符串中给定字符的第一次出现。
你是什么意思它放弃了'lloworld'。如果将它用作 C 字符串,它仍然会以 null 结尾。只是在句子中进一步开始。