2012-03-31 15 views
5

Bir dize değişmezinin adresinin C'de saklandığı adresin adresini alıyor mu? Dize değişmezinin .rodata veri kümesinde saklandığını biliyorum. Ancak, bu adresin adresini almak mantıklı değil. Gc'nin bunu derlediğine ve çalışan bir yürütülebilir dosya oluşturduğuna dikkat edilmelidir.Bir dize değişmezinin adresini adresleme C

+2

Bu "-Wall -Werror" ile yok. –

cevap

7

Sizin örnek geçerli değil: Bu geçerlidir

char **s = &"Is this valid?"; // Not valid, wrong type 

:

char (*s)[15] = &"Is this valid?"; // OK 

"Is this valid?" tipi char[15] olduğunu. Bir char dizisine işaretçinin türü char (*)[15]'dur. Yani &"Is this valid?" türü char (*)[15]'dur.

Dize değişmezinin türüolup, burada N dizenin uzunluğudur.

2

&"Is this valid?" tipi char (*)[15] (char bir uzunluk-15 dizisine yani bir işaretçi) 'dir.

GCC, -Wall ile derleyip derlemediğinizi size bildireceğinden, kodunuz geçersiz.