2017-08-27 134 views
0

之间有什么区别:初始化字符串使用指针

char arr[20]="I am a string" 

char *arr="I am a string" 

怎么可能只用一个指针初始化数组?

+0

[可能的重复](https://stackoverflow.com/questions/164194/why-do-i-get-a-segmentation-fault-when-writing-to-a-string-initialized-with-cha) –

+0

可能的重复[为什么在写入以char \ * s初始化但不是“char s \ [\]”的字符串时出现分段错误?](https://stackoverflow.com/questions/164194/为什么 - 我得到 - 分割 - 错误 - 当写入字符串初始化与cha) –

+0

可能重复[如何初始化字符串指针?](https://stackoverflow.com/questions/11859737/how-to-initialize-string-pointer) – RaghavGarg

回答

0

一个区别在于分配的存储大小。第一个表达式分配20个字符,但第二个表达式分配字符串的长度(13个字符)。

第二个区别在this post中提到。这将在如何分配这些变量的方式上进行讨论。

+0

谢谢,但我不明白字符串是如何初始化为指针的第二种方法,因为指针用于指向另一个变量 –

+0

@HiruniNimanthi在引用的帖子中描述了这个问题。 – OmG

0

在第一种情况下,您将部分初始化堆栈分配数组,其中包含从"I am a string"字符串文字表示的缓冲区中取出的14个字符。

在第二种情况下,您正在初始化堆栈分配的指针,其指针指向一个具有由"I am a string"字符串文字表示的静态存储持续时间的缓冲区。另请注意,在第二种情况下,您应该使用const char *arr

1

第一个是清楚的,它是一个数组初始化,而第二个意味着字符指针* arr指向未命名的静态数组,它将存储字符串“我是一个字符串”。