2011-10-12 35 views
7

Aşağıdaki ödevler geçerli mi? Ya da bunlardan herhangi biri problem yaratır. Lütfen öneriniz.const char işaretçi atamaları

const char * c1; 
const char * c2; 
const char * c3; 
char * c4; 

c2 = c1; 
c2 = c3; 
c2 = c4; 

Aşağıdakileri yaparsam ne yapmalıyım? Tüm işaretçileri uninitalized bırakılan veya herhangi bir geçerli bellek konumlarına işaret etmiyor çünkü onlara KQUEUE yok boyunca olduğu gibi

const char * c5 = "xyz"; 
char * c6 = "abc"; 

c2 = c5; 
c2 = c6; 
+0

@ Kshitij Mehta - bir ev ödevi değil, geniş kod tabanımızla bellek sorunu yaşıyoruz. Yani lütfen herhangi bir yardım takdir edilecektir. – user32262

+0

@user Aynı soruyu birkaç kez şimdi sordunuz. Onları tekrar tekrar yanıtladık. Bu soruya yaptığınız düzenleme hiçbir şey eklemiyor. Sadece yukarıda istediğin şeyi tekrarlıyor. –

+1

Aynı şeyi sorsam özür dilerim. Belki işaretçilerle anlayışım doğru değildir. – user32262

cevap

9

Tüm geçerli ifadeleri.

Ve bunlar geçerli çünkü işaretçi sabit değil, ancak işaretçi tarafından gösterilen değer sabit. Yani, burada işaretçiler farklı bir yere işaret etmek için yeniden atanabilir.

3

Bu ödevler, benim ve diğerlerinin yakın zamandaki benzer sorularınızda açıkladıkları gibi tamamen geçerli.

A const char*, o işaretçiyi kullanarak değiştirilemeyen bellekten bir işaretçidir. Buradaki hiçbir şey bunu atlatamaz. Derleyici o zamandan beri c4 = c1 atandığında itiraz eder ve bu durum const'ı aşar.

30

Aklınızda asterik üzerinden bir çizgi çizin. işaretçi p sabittir ve bu yüzden hiç p puan karakterlerdir - - yani hem değiştiremez solunda ve

  1. const char * const p Örneğin pointer

    ne tür sağa işaret ediliyor budur işaretçiyi ve içeriğini p

  2. const char * p - p sabit karakterlere işaret eder. p değerini değiştirebilir ve farklı sabit karakterlere işaret edebilirsiniz. Ama ne olursa olsun p işaret eder, içeriği değiştiremezsiniz.
  3. char * const p - Sen işaretçi değiştiremiyoruz ancak içeriğini

ve son olarak

  1. char * p değiştirebilir - Herşey yardımcı kapmak

Umut hazır hale geldi.

+0

İlk örnekte 2 * s var mı demek istiyorsun? –

+0

Çok açık. Güzel mesaj. Giriş const olarak bir const const * ptr değerini neden değiştirdiğimi merak ettim ve bu mükemmel bir şekilde açıklığa kavuştu. 40 dakika daha oyum yok, bundan sonra ++ olacak. – stevieb

0

Tüm bunlar geçerli, tek sorunlu satır char * c6 = "abc";: burada "abc" bir const değişmezidir, dolayısıyla const olmayan bir işaretçiye atanması güvenli değildir ve en azından bir derleme hatası değilse bir uyarı oluşturmalıdır (Ben derlemeyi denemedim).