Questo è quello che ho trovato durante il mio periodo di apprendimento:
#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;
}
Quindi nella variabile int dis(char a[1]), [1]sembra non fare nulla e non funziona
affatto, perché posso usarlo a[2]. Proprio come int a[]o char *a. So che il nome dell'array è un puntatore e come comunicare un array, quindi il mio puzzle non riguarda questa parte.
Quello che voglio sapere è perché i compilatori consentono questo comportamento ( int a[1]). O ha altri significati che non conosco?
typedeftipo array. Così il "decadimento puntatore" in tipi di argomenti non è solo zucchero sintattico sostituzione []con *, è davvero passare attraverso il sistema di tipi. Ciò ha conseguenze nel mondo reale per alcuni tipi standard come quelli va_listche possono essere definiti con tipo array o non array.
int dis(char (*a)[1]). Poi, si passa un puntatore a un array: dis(&b). Se sei disposto a utilizzare funzionalità C che non esistono in C ++, puoi anche dire cose come void foo(int data[static 256])e int bar(double matrix[*][*]), ma questa è un'intera lattina di worm.