これは私の学習期間中に私が見つけたものです:
#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;
}
したがって、変数int dis(char a[1])
では、
を使用できるため、[1]
は何も実行せず、まったく機能しません。またはのように。配列名はポインタであり、配列を伝達する方法を知っているので、私のパズルはこの部分についてではありません。a[2]
int a[]
char *a
私が知りたいのは、コンパイラがこの動作を許可する理由です(int a[1]
)。それとも私が知らない他の意味がありますか?
typedef
配列型の場合にも当てはまります。したがって、引数型の「ポインタへの減衰」は、単なる構文の置き換え[]
ではなく*
、実際に型システムを通過します。これはva_list
、配列タイプまたは非配列タイプで定義されるようないくつかの標準タイプに対して実際の結果をもたらします。
int dis(char (*a)[1])
。次に、配列へのポインタを渡しますdis(&b)
。C ++には存在しないCの機能を使用するつもりなら、void foo(int data[static 256])
やのように言うこともできますが、それはint bar(double matrix[*][*])
他のワームの缶です。