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?
typedef
tipo 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_list
esse 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.