Bu soru aşağıdakileri this other question about C declarations izlemektedir. Bu soruya verilen cevabı okuyarak, spiral rule'u okudum ve ayrıca “beyanın kullanımdan sonra” ne anlama geldiğini anladım. Şimdiye kadar tamam. Ama sonra this declaration okuyun:Spiral kural ve 'declaration, C ve C++ bildirimlerini ayrıştırmak için kullanımı izler'
char *(*(*a[N])())();
ve ben bunu ayrıştırmak nasıl merak kuralını ' "beyanı kullanımını izler" oldu. Özellikle dizi bölümü için.
(*(*a[N])())
bir char *
, alttaki
(*a[N])() // 1
dereferencing bu 'bir char*
dönen fonksiyonu' dur döndüren bir işlev ()
olduğunu ve bu yüzden 1 is a:
Ne Okudum olduğunu 'char *
' 'i döndüren bir işlevin göstericisine' (*a[N])
çağrıldığında, bu [önceki bildirim] 'olur. Bu noktada, (*a[N])
, char *
döndüren bir işleve bir işaretçi döndüren bir işlevdir.
Ancak bu kuralı 'işaretçi dizisi' ve 'işaretçi dizisi' arasında ayrım yapmak için nasıl uygulayacağımı bilmiyorum.
Birisi bunu açıklayabilir mi?
Diğer soru: &
(C++), *
ve []
arasındaki bildirimlerde "öncelik" kuralları nelerdir? Doğru 'sarmal kural' anlamış
, kontrol etmek için, aynı zamanda, aşağıda bu ifadeyi ayrıştırma [belki "öncelik" doğru bir terim değildir]; lütfen yanılıyorsam söyle. Benim için
+-----------+
| +------+ |
| | +-+ | |
| |^| | |
char* (*(* a[N])())();
^^^^^^
| | | | | |
| | +---+ | |
| +--------+ |
+--------------+
daha kolay (döngü tarafından döngü) aşağıdaki gibidir: ...
a
N dizisi olan dönen işlev- işaretçi ... geri çalışması için
- işaretçi ...
char *
Ama belki de bu durumda doğru cevabı elde etmeme izin veren bir şeyi özlüyorum ama bu daha karmaşık bir durumda yanlış olabilir.
@Vality: C++ etiketini düşürecekseniz, C++ 'da '&' ifadesini de bırakmanız gerekir. –
@JonathanLeffler İyi bir nokta, Normalde bunun iki soruya bölünmesi gerektiğini söyleyebilirim, ancak böyle eski bir soruya bunu yapmakta isteksizim. – Vality
@Vality Neden soru aniden çok fazla dikkat çekti? ('Güzel soru' rozeti için bilgilendirildim). –