Foi o que encontrei durante meu período de aprendizado:
#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;
}
Então, na variável int dis(char a[1]), o [1]parece não fazer nada e não funciona
, porque eu posso usar a[2]. Assim como int a[]ou char *a. Eu sei que o nome do array é um ponteiro e como transmitir um array, então meu quebra-cabeça não é sobre essa parte.
O que eu quero saber é por que os compiladores permitem esse comportamento ( int a[1]). Ou tem outros significados que eu não conheço?
typedeftipo de matriz. Assim, a "decadência para ponteiro" em tipos de argumento não é apenas açúcar sintático substituindo []com *, isso realmente está acontecendo através do sistema tipo. Isso tem consequências reais para alguns tipos padrão como va_listesse que podem ser definidos com o tipo de matriz ou sem matriz.
int dis(char (*a)[1]). Em seguida, você passar um ponteiro para um array: dis(&b). Se você estiver disposto a usar recursos C que não existem no C ++, também pode dizer coisas como void foo(int data[static 256])e int bar(double matrix[*][*]), mas essa é outra lata de worms.