Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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++_String_Pointers - Fatal编程技术网

C++ 用指针生成字符串

C++ 用指针生成字符串,c++,string,pointers,C++,String,Pointers,我了解到指针指向内存地址,因此我可以使用它来更改在该地址设置的值。所以像这样: int *pPointer = &iTuna; pPointer这里的内存地址是iTunes。因此,我们可以使用pPointer更改iTunes上的值。如果我打印pPointer内存地址,如果我打印*pPointer则打印iTuna处的值 现在看这个节目 char* pStr= "Hello !"; cout<< pStr << endl; cout<< *pSt

我了解到指针指向内存地址,因此我可以使用它来更改在该地址设置的值。所以像这样:

int *pPointer = &iTuna;
pPointer
这里的内存地址是
iTunes
。因此,我们可以使用
pPointer
更改
iTunes
上的值。如果我打印
pPointer
内存地址,如果我打印
*pPointer
则打印
iTuna
处的值

现在看这个节目

    char* pStr= "Hello !";
cout<< pStr << endl;
cout<< *pStr << endl;
system("PAUSE");
return 0;
char*pStr=“你好!”;
库特
  • “Hello!”
    是一个数组,类型为
    字符常量[8]
    ,值为
    {H',e',l',l',o',0}
    pStr
    是指向其第一个元素的指针;其最后一个元素的值为
    0

  • iostreams库中有一个
    char const*
    参数重载,该参数将该变量视为指向数组第一个元素的指针,并打印每个元素,直到遇到零为止。(“口语中的空字符串”)

  • 取消引用指向数组第一个元素的指针将得到数组的第一个元素,即
    'H'
    。这与pStr[0]
  • 相同

    1-)在“Hello!”中,每个字母分别存储,并有一个指针 一个记忆地址。那么pStr是如何指向所有字母的呢

    字母按该顺序存储在每个存储单元中,每个存储单元都有一个额外的最终单元 按住0以标记结束

    2-)当我打印出pStr时,它也会打印Hello!不是记忆地址


    cout您对指针的理解在各个方面都是正确的

    您的问题是1-)因为
    pStr
    指向
    char
    ,所以它实际上指向

    2-
    cout
    char*
    参数重载。它将打印字符串中的任何字符,直到到达
    空字符

    3-)您正在取消对字符数组第一个元素的指针的引用

  • 指向数组的指针(C样式的字符串是字符数组)只是指向数组第一个元素的指针

  • 您还需要理解字符串的概念。在C和C++中,String是几个字符(char)在内存中一个接一个地定位,基本上是“h”、“e”、“l”、“l”、“o”、“0”。您的指针保存第一个符号的内存地址,C++库知道字符串是启动这个地址的所有内容并以“0”结尾。

  • 当您将char*传递给cout时,它知道您输出了一个字符串,并将其打印为字符串

  • 结构*pStr的意思是“给我任何位于pStr中存储地址的东西”。这将是char-一个字符-'H',然后传递给cout,您只打印一个字符

  • 指针,
    *pStr
    指向特定的内存地址,但该内存地址不仅可以用作单个元素,即
    char
    ,还可以用作此类元素数组或内存块的开头

  • char
    数组是C语言中的一种特殊类型的数组,因为有些操作以特定的方式处理它们:作为字符串。因此,
    printf(“%s”),…
    cout
    知道,当给定一个
    char*
    时,它们应该查找一个字符串,并打印所有字符,直到终止的
    null
    字符为止。此外,C提供了一个字符串库,其中的函数设计用于将这些
    char*
    作为字符串进行操作

  • 这种行为与您自己的分析所期望的一样:取消引用
    pStr
    只会给出内存地址处的值,在这种情况下,是内存中
    字符数组的第一个元素


  • 请扔掉。我不太喜欢那篇文章,因为初学者(最有可能的读者)会发现,如果在输入操作后cin.get()或getchar()不暂停,他会感到非常困惑。
    char*pStr=“你好!”;
    已被弃用,请使用
    char const*
    @Cubic,是的,您必须使用其中的一个或两个来解决它,或者您可以在调用
    cin.get
    之前依赖
    cin.sync
    的非保证行为。或者您可以像普通控制台应用程序一样使用它,而不是尝试将其作为独立应用程序。太棒了回答。有一件事,你说iostreams库中有一个char2的重载是什么意思argument@MohamedAhmedNabil:这里有一个重载
    名称空间std{ostream&operator
    char const
    char const
    !@Xeo:当然。我刚才说了什么?你错过了字符串文本类型。“overrided”是什么意思是指?在c++中,可以为特定类型重载运算符(如+或>>):