C ile bir bellek adresi ve işaretçi arasındaki fark nedir?
Bir c ++ programcısının perspektifinde (düşük seviye c, asm gibi farklı olabilir), akutal bellek adresleri hakkında hiçbir şey bilmemelisiniz. Programda belleğe bir işaretçi ile erişirsiniz. Bu işaretçideki değer gerçek bir bellek adresine karşılık gelebilir. Ancak durum böyle olmak zorunda değil. Nullptr değerinin de 0 değeri olması gerekmez. Başka değerler de (örneğin FFFFFFFF) mümkün olabilir. Bunu hatırlayan makinelerin olduğunu hatırlıyorum.
Sınıfınızı yazmak gibi, yapıyı veya diziyi somutlaştırın ve aşağıda gerçekten neler olduğunu bilmenize gerek yok. Örneğin. daha sonra silmek için uzunluğu ve türü belirtmek üzere her diziden önce bazı baytlar vardır.
Konuya nasıl yaklaştığımıza bağlıdır. Çalışma zamanında yansıması olmayan ve türü değişmeyen, statik olarak yazılan bir dil olan C'nin, değişkenler gibi ilkellere sahip olması ve mümkün olduğunca az özeti olması önemlidir. Bir bayt, lanet bir bayttır. Bu çok önemli.
Bu perspektiften bakıldığında, çalışma zamanı sırasında, bir işaretçi ve bir bellek adresi arasında ayrım yapmak için kesinlikle hiçbir neden yoktur: çünkü kimse, belirli bir anlamı kabul eden kod dışında, orada ne olduğunu ve nasıl yorumlanacağını gerçekten bilmiyor. Bir saniyeliğine sendikalardan başka düşünmeyin.
Bu varsayım koda derlenmiştir, dolaylı olarak yerleştirilmiş bir tür tanımlayıcısı yoktur veya dinamik olarak yazılan bir dille karşılaştırıldığında ne düşünebilirse. Geliştirici, bir birliğin tüm varyantlarında veya ortak bir üstbilgiyi paylaşan yapılarda bir tür gösteren bir yapıya bir alan yerleştirebilir ve ardından bir anahtar kullanabilir (veya ortak üstbilgide bulunan stratejileri kullanabilir), ancak bu bir dil değildir özelliği, elle uygulanması gerekir. Her şey, kodda derlenen varsayımlar ile bellek adreslerinde çalışan bayt koduna kadar kaynar. Rastgele bir bellek alanını belirli bir türün yapısı olarak mı referanslıyorsunuz? Veriler rastgele olacaktır ancak kodun bunu yaparken bir sorunu yoktur.
Derleme zamanına kadar kaynak kodu başka bir hikaye. Kaynak kodunda derleyici ve IDE vidalanmamamıza yardımcı olur. O kadar kolay değil. Yazım sistemini uygun şekilde kullanmak geliştiricinin bozulmamasına yardımcı olur, ancak daha sonra yanlış yazılmış tip tanımlarının küçük bir miktar bile değişmesi durumunda bir şeyler havaya uçurabilen veya üfleyemeyen tip dökümler (zorla varsayımlar olarak da bilinir) vardır.
Bellek adreslerine başvururken tutarlılığı kontrol eden, geliştiricinin varsayımlarının teslim alındığını kontrol eden derleyicidir. Yani bu anlamda daktilo işaretinin fazladan bilgi taşıdığını söyleyebiliriz. Geliştiricinin türlerle ilgili varsayımları kontrol edilmezse, bir derleyici uyarısı veya hatası ve hatası vardır. Kontrol ederlerse (veya tutarlılık kontrolünü bastırarak kontrol etmeye zorlanırlarsa), bu varsayımlar, kod türüne bellek adresleriyle çalışmanın örtülü yolları olarak, esas olarak tür bilgisinden çıkarılır.
Uzun öykü kısa: derleme zamanına kadar, bellek adresleri türü taşır - bu yüzden C kullanmıyoruz… bellek adresi ofsetleri. C'nin hiç yansıması olmadığından, çalışma zamanı sırasında tür bilgisi yoktur, bu nedenle işaretçiler bellek adresleridir ve hepsi budur.
Bellek adresi, bellekteki bir şeyin konumudur.
İşaretçi, bir bellek adresi içeren bir değişkendir (veya parametredir).
Dolayısıyla, bir işaretçi bir bellek adresi değildir… bir bellek adresi içeren bir kaptır.
İşaretçi, diğer değişkenler gibi, işaret edilen tarihin türü hakkında bir şeyler söyleyen bir veri türüne sahiptir. Örneğin, "işaretçi - int", "işaretçi - karakter" den farklı bir veri türüdür. “Boşluk gösterici” bilinmeyen bazı veri türlerinin göstergesidir.
İşaretçi bir değişken olduğu için belleği kaplar. Dolayısıyla, pointer değişkeninin kendi bellek adresi vardır. Dolayısıyla, bir işaretçi değişkeni verildiğinde, gerçekten iki bellek adresi söz konusudur. Bellek adreslerinden biri işaretçi değişkeninin içinde saklanır ve bellekteki başka bir şeye işaret eder. İşaretçi değişkeninin kendisinin belleğindeki konum ise diğer bellek adresi.
MOSFET ve CMOS arasındaki fark nedir?Usna chawal ve brown rice arasındaki fark nedir?ISO ve IATF sertifikası arasındaki en büyük fark nedir?'Güzel' ve 'sıcak' arasındaki fark nedir? Bir kız ne denir?Bir hemşire ile kayıtlı bir hemşire arasındaki fark nedir?