Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取字符串中特定元素的地址_C++_C_String - Fatal编程技术网

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

C++ 如何获取字符串中特定元素的地址,c++,c,string,C++,C,String,char a[]=helloworld 我想知道“l”的地址 a+2或&a[2]给出了一个新的世界。加上其他的符号表示错误 那么如何获取“l”的地址 如果不可能,请解释?a+2是数组中第三个元素的地址,即第一个l的地址 在此表达式中,类型为char[11]的a隐式转换为指向其初始元素的指针,生成类型为char*的指针,向该指针添加2,给出数组第三个元素的地址 &a[2]给出了相同的结果。[2]相当于*a+2,因此完整表达式相当于&*a+2。&和*相互抵消,留下+2,与上面相同 在程序中如何解释此

char a[]=helloworld

我想知道“l”的地址

a+2或&a[2]给出了一个新的世界。加上其他的符号表示错误

那么如何获取“l”的地址

如果不可能,请解释?

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

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

&a[2]给出了相同的结果。[2]相当于*a+2,因此完整表达式相当于&*a+2。&和*相互抵消,留下+2,与上面相同

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

我想你需要:

这将指向l的开始。
您可以使用%p描述符使用printf打印此文件。

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

放弃“LLOWORD”是什么意思。如果将其用作C字符串,它仍将以null结尾。只需在句子中再往下一点就可以了。

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

对于C:为C使用适当的格式字符串: PrintFadAddress:%p\n,&a[2]

对于C++:通过强制转换到空*避免cout对字符串的解释:
我可以假设您正在输出它吗:使用static_cast&a[2]作为地址输出。如果是这样,它可能是一个复制品:在C中,我们可以通过Prtff%d获得DA地址,而使用Prtff%s,得到[2 ]和'LLooLLD,和[2 ]…但是由于在C++中,我们只有CUT,默认情况下,使用STRIGWAT编译器显示……所以如何获得地址then@Vj是什么让你认为C++中只有CUT?在cstdio标题中有printf。而那个代码没有得到地址。该代码正在打印地址。您已经获得了您和所有人显示的代码地址:a+2或&a[2]。您的问题在于打印该值,使其看起来像一个地址。@RobKennedy ya同意…:在C++中,Couuy有地址-char *。cout将其用作字符串。是否要原始地址-然后将其强制转换为void*-1 C中地址的正确打印格式说明符是%p而不是您的%x@vjshah那你为什么把它标记为C?@user411313,不知道%p。现在我知道了。好电话。
char *lAddress = strchr(a, 'l');