有什么区别:
char arr[20]="I am a string"
和
char *arr="I am a string"
如何仅使用指针初始化数组?
答案 0 :(得分:2)
第一个是清楚的,它是一个数组初始化,而第二个意味着字符指针* arr指向未命名的静态数组,它将存储字符串“我是一个字符串”。
答案 1 :(得分:1)
一个区别在于分配的存储空间大小。第一个表达式分配20个字符,但第二个表达式分配字符串的长度(13个字符)。
this post中提到了第二个区别。这是关于如何分配这些变量的讨论。
答案 2 :(得分:1)
在第一种情况下,您部分初始化堆栈分配的数组,其中14个字符取自"I am a string"
字符串文字所代表的缓冲区。
在第二种情况下,您正在使用指向缓冲区的指针初始化堆栈分配的指针,该缓冲区的静态存储持续时间由"I am a string"
字符串文字表示。另请注意,在第二种情况下,您应该使用const char *arr
。