Bir dizi, ilk elemanına bir göstericiye "bozunur", yani scanf("%s", string)
eşdeğerdir scanf("%s", &string[0])
. Öte yandan, scanf("%s", &string)
bir işaretçiye geçer char[256]
, ancak aynı yere işaret eder.
Sonra scanf
, argüman listesinin kuyruğunu işlerken, bir char *
. Bu, geçtiğinizde string
veya geçtiğinizde Doğru Şeydir &string[0]
, ancak geçtiğinizde &string
, dil standardının garanti etmediği bir şeye bağlı olursunuz, yani işaretçiler &string
ve &string[0]
- farklı tür ve boyutlardaki nesnelere işaret eden aynı yerden başlayın - aynı şekilde temsil edilir.
Bunun çalışmadığı bir sistemle hiç karşılaştığıma inanmıyorum ve pratikte muhtemelen güvendesiniz. Hiç de az değil, yanlış ve bazı platformlarda başarısız olabilir. (Varsayımsal örnek: her işaretçi ile tür bilgilerini içeren bir "hata ayıklama" uygulaması. Sanırım "Lisp Makineleri" Symbolics üzerindeki C uygulaması böyle bir şey yaptı.)