Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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+中的指针+;_C++_C_Pointers - Fatal编程技术网

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是
    字符串

  • 因此,如果
    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
    具有type
    std::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类型。