2011-05-18 31 views
5

K & R'yi okuyarak ve egzersizleri yaparak öğreniyorum. Şimdi bölüm 5'de işaretçilerle ilgileniyorum. * P bir adres içerirInt * p uzun int * p olmalı?

long int *p; 

beri ve int türünde bir değişken bir tutabilecek kadar büyük olacağı garantisi yoktur:

int *p; 

değil: deyimi neden anlamıyorum büyük adres. Yoksa orada mı?

cevap

8

int, işaretçinin işaretçinin boyutuna değil, işaret ettiği nesnenin türüdür. ' "Normal" olarak aynı boyuta sahip olacaktır

int *p; 

double *d; 

pointers s Hem d, ancak bunların veri don: işaretçi boyutu Örneğin

için işaret ettiği nesne bağımsız olduğu aynı boyuta sahip.

Düzenleme: Yorum işaretlerinde belirtildiği gibi aslında aynı boyutta olmak için "gerekli" değildir. John gibi

açıkladı: Mesela

, bir char * bir kelime adresli sistem üzerinde aslında bir int * daha büyük olabilir, o kelimenin içine bir ofset belirtmek gerekiyor çünkü. Sadece bildirmiş olduğu void * ve karakter * uyumlu türlerine işaretçileri tipleri yapısına bir aynı hizalama ve temsilini, işaretçiler sahip olduğunu, aynı hizalama ve temsil hakkına sahip aynı hizalama ve temsilini ve işaretçiler var sendika türlerinin tamamı aynı hizalama ve gösterimi için

+2

"Çift" ve "int" işaretçileri aynı boyuta sahip olmak zorunda değildir. –

+1

@Carl hmm, bence yapmalılar. Belirli bir sistemde bir göstergenin boyutu tutarlı değil mi? – Pepe

+0

Thx Peter. Derleyici, derleyici seçeneklerine göre * p yapmanın ne kadar büyük olduğunu bilir. – grok12

1

int *, int türünde değildir. Bu bir işaretçi türüdür. Bu nedenle herhangi bir adres saklamak için yeterince büyük olacaktır. long int *, int * ile aynı boyuttadır - yalnızca, şeylerin farklı olarak nereye yönlendirildiğini ele alıyorsunuz.

3

long int * bir long int bir noktaya gelir.
Bu uzun bir işaretçi anlamına gelmez.

İşaretçiler ayrı şeylerdir ve kendi boyutları vardır. (derlediğiniz yığılmaya bağlı olarak)

1

Bu, bir int için bir işaretçidir ('int * p' olarak yazma eğilimindedir). Bu temel olarak p'nin bir int için bir işaretçi olduğu anlamına gelir.

İkincisi, uzun bir int için bir işaretçidir.

Her ikisi de işaretçilerdir ve dolayısıyla aynı sayıda bayt depolama alanıdır, ancak biri int, diğeri uzun int.

0

İşaretçinin türünü, gösterdiği noktaya göre karıştırmayın.ifadesinin ifadesinin türü int, ancak p tipi int * şeklindedir.

İlgili konular