2017-08-27 212 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指向未命名的靜態數組,它將存儲字符串「我是一個字符串」。