Folgendes habe ich während meiner Lernphase gefunden:
#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;
}
So in den Variablen int dis(char a[1]), das [1]scheint nichts zu tun und nicht funktioniert
alles, weil ich verwenden kann a[2]. Genau wie int a[]oder char *a. Ich weiß, dass der Array-Name ein Zeiger ist und wie man ein Array vermittelt, daher geht es in meinem Puzzle nicht um diesen Teil.
Ich möchte wissen, warum Compiler dieses Verhalten zulassen ( int a[1]). Oder hat es andere Bedeutungen, von denen ich nichts weiß?
typedefwith-Array-Typ ist. So den „Zerfall Zeiger“ in Argumenttypen ist nicht nur syntaktischer Zucker ersetzt []mit *, es ist wirklich das Typsystem durchlaufen. Dies hat reale Konsequenzen für einige Standardtypen wie va_listdiesen, die mit Array- oder Nicht-Array-Typ definiert werden können.
int dis(char (*a)[1]). Dann übergeben Sie einen Zeiger auf ein Array : dis(&b). Wenn Sie bereit sind, C-Funktionen zu verwenden, die in C ++ nicht vorhanden sind, können Sie auch Dinge wie void foo(int data[static 256])und sagen int bar(double matrix[*][*]), aber das ist eine ganz andere Dose Würmer.