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/