Öğ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?
typedef
dizi 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_list
dizi 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.