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&operatorchar const
,char const
!@Xeo:当然。我刚才说了什么?你错过了字符串文本类型。“overrided”是什么意思是指?在c++中,可以为特定类型重载运算符(如+或>>):