指向C/C++中字符初始化的指针



我一直找不到这个问题的答案(如果重复,我很抱歉(。在C中初始化char数组时,我知道大约有两种方法:

char[] a = "Hello";
char * b = "Hello";

这些实现了相同的结果,但"b"的第二次初始化让我感到困惑。我理解"a"的初始化,因为它在某种程度上等同于*(char *a) = "Hello",假设已经分配了内存等。。。但在我看来,初始化"b"的语法就像"b"是一个指针,指向一个地址";你好"除非使用ASCII值,否则这当然没有意义。据我所见,对于intergers或其他数据类型,没有类似于'b的初始化。如果有人能提供一个解释,那就太好了!我已经使用C很长时间了,这个总是有点困扰我,我一直想不出/找不到答案

这些实现了相同的结果

不完全是。

char[] a = "Hello";

理解"a"的初始化,因为它在某种程度上等价于*(char*a(="a";你好">

*(char *a) = "Hello"对我来说没有意义,所以我不同意它是等效的。a是一个数组。它的大小是从初始化器(6个元素(中推导出来的。

char * b = "Hello";

但在我看来,初始化"b"的语法就像"b"是一个指针,

正确。b是一个指针,因此它与作为数组的a不同。

这个在C++中格式不正确。这是因为字符串文字是C++中const char的数组,并且这些文字不会隐式转换为指向非常量字符的指针(自C++11以来(。

指向一个地址";你好"这当然没有意义

不正确。CCD_ 7指向"0"的第一个元素的地址;你好;。

"你好"是字符串文字。在asm转储中,您将看到它的内存将保留在.data部分。所以我认为b只是一个指向预分配和初始化内存的指针。

相关内容

  • 没有找到相关文章

最新更新