C++ C/C+中的指针+;
我有密码:C++ C/C+中的指针+;,c++,c,pointers,C++,C,Pointers,我有密码: char* s="abc"; 我有一个问题,这段代码中变量的数据类型是什么 s的数据类型为int s是字符串 因此,如果s的数据类型是int,那么cout为什么s的类型是变量声明的类型,而不是其他类型。它是指向char或char*的指针。它指向只读char数组的第一个元素,这就是为什么它应该是const char*。实际上,在C++中,对 char */COD>的转换是不成立的。 < P>数据类型是“代码> char */COD>(字符指针)。它内部包含一个整数(大小取决于目标处理
char* s="abc";
我有一个问题,这段代码中变量的数据类型是什么
s
的数据类型为int
字符串
因此,如果
s
的数据类型是int
,那么cout为什么s
的类型是变量声明的类型,而不是其他类型。它是指向char
或char*
的指针。它指向只读char
数组的第一个元素,这就是为什么它应该是const char*
。实际上,在C++中,对<代码> char */COD>的转换是不成立的。 < P>数据类型是“代码> char */COD>(字符指针)。它内部包含一个整数(大小取决于目标处理器体系结构)。它显示为“ABC”,因为“ABC”是一个由三个字符a、b和c以及一个空终止符组成的文本
可以将其分配给常量字符*。您也可以将其分配给char*,但这很危险,因为您无法修改文本的内容
cout包含一个重载,它将沿着输入指针进行跟踪,直到到达空终止符;在运行时输出字符
因此,s正在模拟一组角色。让我们进行推理。
如果s
具有类型int
,则其声明将包含类型说明符int
或某个等同于int
的typedef名称(用户定义的int
别名)。比如说
int s;
或
同样,如果s
具有typestd::string
则声明如下
std::string s;
char* s;
在s
的声明中既不使用第一个也不使用第二个。
s
声明如下
std::string s;
char* s;
所以它有类型char*
,也就是说它是指向字符的指针。此外,s
由字符串文本初始化
char* s="abc";
在这种情况下,s
由字符串文本的第一个字符的地址初始化
所以当你使用语句时
std::cout << s;
在C++中C.有效,必须指定限定符const
const char* s="abc";
因为字符串文本是不可变的。在您的示例中,没有任何内容的类型是int
。你没有一个std::string
任何地方,你有一个char*
和一个const char[]
literal数据类型是指针。我会仔细阅读它们。@AnT您是正确的,经过编辑。数据类型可以是基本的,也可以是派生的。指针是派生的数据类型。所以在本例中,s既不是string也不是int,它是pointer类型。