我真的对此感到困惑,因为我个人来自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 是什么意思?
答案 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有字符串。但所有发生的事情都是字符串正在程序的数据部分中布局,然后是地址。