如何获取指向字符数组中第一个字符的常量指针
How can you get a constant pointer to the first char in a character array?
在下面的程序中,存储的字符串使用cin
更改,从而更改地址。字符串的第一个元素的地址由 s
表示。第一个元素的地址是字符串本身。因此,当输入新字符串时,它发生了变化。当我尝试输出&s[0]
到cout
时,它会给出整个字符串。
#include<iostream>
using namespace std;
int main() {
char s[6];
cin >> s; // say abcde
cout << s ;
cout << &s[0] ; // gives abcde
cin >> s; // say stack
cout << s;
cout << &s[0] ; gives stack
}
地址没有变化,存储在地址上的数据正在改变。打印整个字符串的原因是因为你传递了一个指向cout
的指针,并且可以通过提供指向第一项的指针将数组传递给函数(或流)。传递指向第一个字符的指针类似于传递 C 样式字符串。如果要打印第一个字符的地址,则需要将指针转换为void*
:cout<<(void*)&s[0]
(这将打印第一个字符的地址)。
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- C++:使用另一个字符将一个字符大写
- 我可以得到一个字符 * 到一个 std::sregex_iterator 匹配 str() 吗?
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 将字符从一个字符串简单分配到另一个字符串不起作用
- 为什么第一个Dynamic_cast没有投射到基类?
- 将第一个n个字符复制到std :: string
- 一个奇怪的字符出现在我的字符数组的第一个
- 当一长串字符传递给第一个 cin 时,为什么不暂停第二个 cin 上的输入?
- 哪个字符是 c++ 中 4 个字符中的第一个
- 从 std::string 中提取(第一个)UTF-8 字符