c++ - char* 和 int* 的区别

标签 c++ initialization string-literals

char*int* 有什么区别?当然,它们是不同的类型,但是我怎么写

char* s1="hello world";

作为

"hello world"

它不是一个字符,它是一个字符数组,我不会写

*s1

作为

char* s1 = {'h','e','l','l','o',' ','w','o','r','l','d'};

int* a = {2,3,1,45,6};

有什么区别?

最佳答案

这很简单:一个字符串文字,即 "foobar" 被编译成一个字符数组,存储在程序的静态部分(即,所有常量存储的地方)和空终止。然后,将 this 分配给变量只是将指向该内存的指针分配给变量。例如,const char* a = "foo"; 会将存储 "foo" 的地址分配给 a

简而言之,字符串常量已经将内存带到了要存储它的地方。

相比之下,没有为指针定义使用初始化列表(即大括号内的元素列表)初始化指针。非正式地,初始化列表 的问题——与字符串文字相比——是它不会“带来自己的内存”。因此,我们必须提供初始化列表可以存储其字符的内存。这是通过声明一个数组而不是一个指针来完成的。这编译得很好:

char s1[11]={'h','e','l','l','o',' ','w','o','r','l','d'}

现在,我们通过将 s1 声明为数组来提供要存储字符的空间。

请注意,您可以使用指针的大括号初始化,例如:

char* c2 = {nullptr};

然而,虽然语法看起来相同,但这是完全不同的东西,称为统一初始化,它将简单地用 nullptr 初始化 c2

关于c++ - char* 和 int* 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24873891/

相关文章:

c++ - 链接器:如果我在程序中不使用 float ,则 "__fltused"被多重定义

c++ - Const 右值编译器区别

c# - 异步实例化类

swift - 类层次结构中的便利初始化导致无限递归

dictionary - 在 Typescript 中声明并初始化字典

python - 这些不同的字符串格式化调用有哪些优点?

c++ - 使用他们的包在 Dev-C++ 中安装 Allegro

c++ - 解构const指针?

c++ - typeid ("") != typeid(const char*)

c++ - 如何找到字符串文字的地址?