char a[]="helloworld";
我想得到'我'的地址?
(a+2)
或&a[2]
提供 lloworld 。并添加其他&符显示错误。
然后如何获得'l'的地址?
如果不可能,请解释一下?
答案 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)
答案 3 :(得分:0)
strchr
将返回指向(地址)字符串中第一次出现给定字符的指针。
答案 4 :(得分:0)
你是什么意思放弃'lloworld'。如果您将它用作C字符串,它仍将被终止。在句子中再开始一点。