如何获取字符串中特定元素的地址
how to get address of particular element in a string
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: %pn", &a[2]);
对于C++:通过强制转换为
void*
来避免 COUT 的字符串解释:cout << "address: " << static_cast<void*>(&a[2]) << endl;
我想你想要strchr
:
char *lAddress = strchr(a, 'l');
这将指向l
的开始。您可以使用printf
%p
描述符打印此内容。
strchr
将返回指向字符串中给定字符第一次出现的指针(地址)。
你的意思是它放弃了"lloworld"。如果您将其用作 C 字符串,它仍将以 null 结尾。只是在句子中再进一步开始。
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 为什么两个矢量元素的地址有这么大的差距?
- 如何在 c++ stl 中获取列表中被推回的元素的地址,在常量时间内?
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 指向结构的指针向量的元素具有相同的地址
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 类实例的地址是否等于类中唯一元素的地址
- 存储 std::list 元素的地址;内存
- 为什么这段代码给出错误......'a'是指针到字符指针,应该存储's'的地址,因为s是指向数组的第一个元素的指针
- 直接从指针/地址访问数组的元素
- 获取向量中元素的地址
- 如何在 2D 字符数组中打印 [x][y] 元素的地址?(C++)
- 按地址从矢量中删除元素
- 将结构元素地址设置为C 中的null(单链接列表)
- 访问字符串元素地址
- 数组元素值,元素地址和指针增量
- 相邻数组元素地址之间的差异
- 在接受std::set元素地址时,从' const int* '到' int* '的转换无效
- 向量回推对元素地址的影响
- 返回数组中最大元素地址的函数