Abd*_*awi 10 c++ initialization string-literals
char*和之间有什么区别int*?当然,它们的类型不同,但我怎么写
char* s1="hello world";
Run Code Online (Sandbox Code Playgroud)
如
"hello world"
Run Code Online (Sandbox Code Playgroud)
它不是一个字符,它是一个字符数组,我不能写
*s1
Run Code Online (Sandbox Code Playgroud)
如
char* s1 = {'h','e','l','l','o',' ','w','o','r','l','d'};
Run Code Online (Sandbox Code Playgroud)
和
int* a = {2,3,1,45,6};
Run Code Online (Sandbox Code Playgroud)
有什么不同?
它非常简单:字符串文字,即"foobar"编译为一个字符数组,存储在程序的静态部分(即存储所有常量)并且以null结尾.然后,将此赋值给变量只需将指向此内存的指针赋给变量.例如,const char* a = "foo";将分配"foo"存储的地址a.
简而言之,字符串常量已经将内存存储在其中.
相反,没有为指针定义使用初始化列表初始化指针(即花括号内的元素列表).非正式地,初始化列表的问题- 与字符串文字相反 - 是它不"带来自己的记忆".因此,我们必须提供初始化列表可以存储其字符的内存.这是通过声明一个数组而不是一个指针来完成的.编译好:
char s1[11]={'h','e','l','l','o',' ','w','o','r','l','d'}
Run Code Online (Sandbox Code Playgroud)
现在,我们通过声明s1为数组来提供存储字符的空间.
请注意,您可以使用指针的大括号初始化,例如:
char* c2 = {nullptr};
Run Code Online (Sandbox Code Playgroud)
然而,虽然语法似乎是平等的,这完全不同的东西被称为统一初始化和只会初始化c2使用nullptr.
| 归档时间: |
|
| 查看次数: |
3575 次 |
| 最近记录: |