Ne zaman tamsayı<->pointer gerçekten doğru mu?
Ortak folklor diyor ki:
Tür sistemi bir sebebi var. Tamsayılar ve işaretçiler farklı türleri vardır, çoğu durumda bir malpraktis aralarında döküm, tasarım hatası gösterebilir ve kaçınılmalıdır.
Böyle bir atama yapıldı, hiçbir varsayımlar yapılacaktır boyutları konusunda tam sayılar ve işaretçiler (döküm
void*
int
En kolay yolu yapmak için kod başarısız 64), ve yerineint
gerekirintptr_t
uintptr_t
stdint.h
.
Bilerekgerçekten yararlı oldubu tür gerçekleştirmek için atmalarını?
(Not: taşınabilirlik fiyatı biraz daha kısa kod sayılmaz "gerçekten faydalı".)
Bildiğim bir örnek:
- Bazıkilidi serbest çok işlemcili algoritmalar2-byte-alligned işaretçi biraz fazlalık olduğu gerçeği yararlanmak. Daha sonra örneğin boolean bayrak olarak işaretçinin en düşük bit kullanın. Bir işlemci uygun bir talimat seti ile, bu bir kilitleme mekanizması için gerekirse işaretçi ve boolean bayrak ayrı olsaydı gerekli olacaktı) ortadan kaldırabilir.
(Not: Bu uygulama güvenli bir şekilde java üzerinden Java ile yapmak mümkün olsa bile.açıklama.eşzamanlı.atom.AtomicMarkableReference)
Bir şey daha?
CEVAP
Bazen onlar bir şekilde bir hashsum bir parçası olmak gerektiğinde tamsayı için işaretçi attı. Ayrıca atıyorum onlara tamsayılar için bazı bitfiddling ile bazı implemetnations nerede garantili göstericiler hep bir veya iki tane yedek parçaları sol, ben de kodlamak CAK veya RB Ağacı bilgileri Sol/Sağ işaretçileri yerine sahip ek bir üyesi. Ama bu asla düşünmek için ortak her türlü Çözümü olarak tavsiye ederim hepsi çok uygulama özeldir. Bazen de tehlike işaretçisi böyle bir şey ile uygulanabilir duydum.
Bazı durumlarda talep ediyorum kimliğimi olarak örneğin sunuculara iletir nesne başına benzersiz bir kimliğe ihtiyacım var. Bazı bellek kaydetmek için ihtiyacım var, ve buna değer ne zaman bağlama bağlı olarak, bu tür bir kimlik olarak benim nesnesinin adresini kullanıyorum, ve genellikle bir tam sayı atmak zorunda.
Gömülü sistemler (canon kameralar, chdk görmek gibi) ile çalışırken sık sık sihirli addesses vardır, (void*)0xFFBC5235
veya benzeri genellikle de orada bulundu
düzenleme:
Genellikle işaretsiz bir tamsayı için bir typedef olan bir pthread_t döndüren tökezledi (aklımda) pthread_self()
üzerinde sadece. Bazı iplik yapı, söz konusu iş parçacığı temsil eden bir işaretçi olsa da içten. Genel olarak bir opak işlemek için başka bir yerde kullanılmış olabilir.
Ne zaman ileriye doğru bir beyan kulla...
ya da doğru bir şeyler yap o zaman eli...
Ne zaman Doğru UseShellExecute ayarlam...
Kullanmak için ne ve ne zaman vs Tamsa...
Javascript uzmanları operatör StringBu...