const char *如何不仅仅是一个角色?

时间:2017-06-19 15:23:20

标签: c++ string pointers char

我真的对此感到困惑,因为我个人来自java背景,最近开始使用c ++。所以,我学会了所有基本的东西,比如,把东西打印到屏幕上等等,现在,我学会了POINTERS。那么,youtube上的那个人(The Cherno's C++ Pointer tutorial这不是他宣称const char *的视频,只是我所遵循的指针教程。)我一直关注的是使用以下声明来声明我的内容知道为'字符串'。

const char* str = "random text here";

但是,如何将char *转换为字符串,甚至使用双引号就像一个字符串!另外,常数与此相关的是什么?如果我从代码中删除const,则会给我一个错误。但是,我理解指针是什么。它是一个保存另一个变量的内存地址的变量,因此如果要直接访问该变量,它们只需执行*ptrVarName并取消引用它。但字符串"like this one"如何成为内存地址? 我不必做这样的事吗?

char[] str = "string here";

然后呢:

char* stringPointer = *str;

(警告:未经测试的代码!)

提前致谢。 (哦,对不起,如果这是一个非常无关紧要的问题,或者问题构造不当,我刚刚开始使用c ++和stackoverflow)

编辑:好的,所以我理解char* str的含义。这意味着当您引用*str时,表示您正在访问内存中的第一个字符。好的,我现在明白了。但是, const 是什么意思?

4 个答案:

答案 0 :(得分:1)

const char* str = "random text here";

在右侧,"random text here"定义了一个字符串文字,实际上是一个类型为const char[17]的数组(包括空终止符)。将该数组分配给const char* str decays时,指向指向第一个字符的指针。您无法通过指针修改字符串文字,因为字符串文字存储在只读内存中,因此以下内容是非法的:str[0] = 'x';

char[] str = "string here";

这个是不同的。它定义了char数组str,其大小与右侧的字符串文字相同(const char[12])。字符串文字将被复制到数组str中,因此您可以修改str。在这种情况下,写str[0] = 'x';是合法的。

答案 1 :(得分:0)

如果声明const char * sth =“mystring” 它将把mystring放在内存中,并指向它的工作就像数组一样,但可以直接访问内存

答案 2 :(得分:0)

这些是普通的C字符串。 C字符串始终以null结尾。换句话说,它最后有'\0'。因此,您只需要在内存中字符串开始的位置,您可以在结束时找到它。

对于指针算术,这些[]括号只是语法糖。 str[]*str相同,str[1]*(str+1)相同,只是将指针递增一char(8位)并获取地址第二个元素。

答案 3 :(得分:0)

C确实没有字符串。字符串是一个字符数组,以nul(0)结尾。现在C中的数组和指针紧密相连,char *或const char *通常指向一个字符串,但只是与其他指针通常指向数组的方式相同。单个char *可能只指向单个字符,您必须从上下文中知道,就像int *可能指向一个整数或整数数组一样。

因为字符串很方便,所以字符串文字有一个特殊的语法规则。引号中的字符串文字变为const char *(实际上它的类型是char *以便向后兼容)。所以在这个意义上,C有字符串。但所有发生的事情都是字符串正在程序的数据部分中布局,然后是地址。