Voici ce que j'ai trouvé pendant ma période d'apprentissage:
#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;
}
Donc, dans la variable int dis(char a[1])
, le [1]
semble ne rien faire et ne fonctionne pas du
tout, car je peux utiliser a[2]
. Tout comme int a[]
ou char *a
. Je sais que le nom du tableau est un pointeur et comment transmettre un tableau, donc mon puzzle ne concerne pas cette partie.
Ce que je veux savoir, c'est pourquoi les compilateurs autorisent ce comportement ( int a[1]
). Ou a-t-il d'autres significations que je ne connais pas?
typedef
type avec tableau. Ainsi, la "désintégration en pointeur" dans les types d'argument n'est pas simplement le remplacement du sucre syntaxique []
par *
, elle passe vraiment par le système de types. Cela a des conséquences dans le monde réel pour certains types standard comme va_list
celui qui peut être défini avec un type tableau ou non-tableau.
int dis(char (*a)[1])
. Ensuite, vous passez un pointeur vers un tableau: dis(&b)
. Si vous êtes prêt à utiliser des fonctionnalités C qui n'existent pas en C ++, vous pouvez également dire des choses comme void foo(int data[static 256])
et int bar(double matrix[*][*])
, mais c'est une toute autre boîte de vers.