字符* str= "ab" , str 和 &str 的混淆
confusion of char* str="ab", str and &str
我正在学习指针,这是我的代码。我定义了一个指向char(实际上是字符串)*str
的指针和一个指向int *a
的指针,它们以相同的方式定义。我认为str
和a
都应该是一个地址,但是当我试图输出str
和&str
, a
和&a
时,我发现str不是地址,它是字符串。就str
和a
的类型而言,char *str
和int *a
有什么区别?谢谢你!
#include<iostream>
#include<string>
using namespace std;
int main()
{
char *str = "FA";
cout << "str: " << str << endl;
cout << "&str: " << &str << endl;
int b = 5;
int *a = &b;
cout << "a: " << a << endl;
cout << "&a: " << &a << endl;
}
输出:
str: FA
&str: 0x7fff5a627280
a: 0x7fff5a62727c
&a: 0x7fff5a627288
好吧,这归结为C语义。字符串是而不是c语言定义的类型。char
是单个字符的类型。为了在C语言中处理字符串,按照惯例,指向char
的指针意味着从该指针指向的位置开始,并在0
的第一个字节结束的字符串。
说明:
char *str = "ABC";
"翻译"成类似
的内容const char <nosymbol>[4] = {'A', 'B', 'C', ' '};
char *str = &(<nosymbol>[0]);
c++知道char *
的特殊含义,因此,<<
运算符将遵循C程序员最小意外的原则,将char *
作为字符串。
流的<<
操作符重载char *
,输出c风格的字符串。这通常是你想要的,但如果不是你想要的,你可以使用reinterpret_cast<void*>
或addressof
。
相关文章:
- Python str to C++ to Python str
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 字符串变量,比如说"字符串str",可以直接复制到数组中吗?
- 解释一下 for (char c : str) 的作用?
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- Getline(cin,str)的奇怪输出
- 比使用 s.str().c_str() 更好的表达?
- 除以 str.length() 什么也没显示
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- 我可以得到一个字符 * 到一个 std::sregex_iterator 匹配 str() 吗?
- C6001:使用单元化内存"str[i]"
- 而(getline(fin,str)){}即使在到达eof之后仍在处理数据
- 在给定的代码中,有人可以解释一下(int i = 0; i<len; i++)count[str[i]]++的代码片段;
- 在函数内部传递字符 *str
- rdbuf()->str()在哪里?
- std::smatch str() 未返回正确的字符串
- 这是 boost::filesystem 中的错误吗?为什么 boost::filesystem::p ath::str
- STR这个实现是否安全且可移植?
- 字符* str= "ab" , str 和 &str 的混淆