Öğrenme dönemimde bulduğum şey bu:
#include<iostream>
using namespace std;
int dis(char a[1])
{
int length = strlen(a);
char c = a[2];
return length;
}
int main()
{
char b[4] = "abc";
int c = dis(b);
cout << c;
return 0;
}
Yani değişkende int dis(char a[1]), [1]hiçbir şey yapmıyor ve hiç çalışmıyor
, çünkü kullanabilirim a[2]. Tıpkı int a[]veya gibi char *a. Dizi adının bir işaretçi olduğunu ve bir dizinin nasıl aktarılacağını biliyorum, bu yüzden bilmecem bu kısımla ilgili değil.
Bilmek istediğim şey, derleyicilerin bu davranışa neden izin verdiğidir ( int a[1]). Yoksa bilmediğim başka anlamları mı var?
typedefdizi tipiyse de geçerlidir . Argüman türlerinde "işaretçisi çürüme" Yani değiştirilmesi sadece sözdizimsel şeker değil []ile *, gerçekten tip sistemi üzerinden gidiyor. Bunun, va_listdizi veya dizi olmayan türle tanımlanabilen bazı standart türler için gerçek dünya sonuçları vardır .
int dis(char (*a)[1]). Daha sonra, bir dizi için bir işaretçi geçmesi: dis(&b). C ++ 'da bulunmayan C özelliklerini kullanmak istiyorsanız, void foo(int data[static 256])ve gibi şeyler de söyleyebilirsiniz int bar(double matrix[*][*]), ancak bu tamamen başka bir solucan kutusu.