2017-06-19 72 views
-4

我真的很困惑,因为我个人,我来自java背景,最近开始C++。所以,我学会了所有基本的东西,比如把东西印到屏幕上,然后现在我学到了指针。因此,YouTube上的人(The Cherno's C++ Pointer tutorial这不是他声明const char *的视频,只是我遵循的指针教程。)我一直在使用以下语句来声明我所知道的“字符串” 。const char *不只是一个字符?

const char* str = "random text here"; 

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

char[] str = "string here"; 

然后执行:

char* stringPointer = *str; 

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

感谢。 (噢,对不起,如果这是一个非常NOOBY问题或问题是制作粗糙的,我刚开始用C++和计算器)

编辑:好了,我明白了char* str的意思。这意味着当你参考*str时,这意味着你正在访问内存中的第一个字符。好的,我现在明白了。但是,const是什么意思?

+11

听起来像你可以使用[良好的C++书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。您可以从随机在线教程中获得更完整的教育。 – NathanOliver

+3

如果您使用C++,为什么不使用'std :: string'? – RPGillespie

+1

事实上,从'T *',我们不知道是否有一个或几个对象。 – Jarod42

回答

0
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';将是合法的。

0

如果声明为const char *某物=“MyString的” 这将放置了mystring在矿井内存和某物指向它像数组,但可以直接访问内存

+0

但你还没有回答我的子问题“const是什么意思?” –

+0

由于petar velv说他们没有区别他们 –

+0

但是,埃米尔(嘿,你有和我一样的明显的名字),当我使用char * str =“一些文本”; C++提供了一个错误 –

0

工作,这些都是普通的C字符串。一个C字符串总是空终止。换句话说,它最后有'\0'。所以你只需要在内存中的字符串开始的地方,你可以找到它结束的时间。

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

+3

Ameer - 你真的需要得到一本好书并阅读指针和指针算术。 '*(str + 1)'意思是“将'1 * sizeof(str)'加到指针'str'并且*然后*取消引用“ – RPGillespie

+0

是的,我明白了,当我在我的文本编辑器中尝试过某些东西时,我意识到了,然后我明白了,无论如何,我破产了,没有钱买书;( –

0

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

由于字符串很方便,因此字符串字面量有一个特殊的语法规则。在引号中的字符串文字变成了一个常量字符*(实际上它的类型是char *,用于向后兼容)。所以在这个意义上,C有字符串。但是,所发生的一切就是字符串正在布局在程序的数据部分,然后是地址。

相关问题