C/C++中的数组名是个很奇怪的东西,它到底代表什么呢? 对于char array[n](n是一个常数),大概有这么几种语义: <1> const char* <2> char [n] <3> char (&)[n]
举例如下(VC.NET 7.1下编译):
<1> char *p = array; // array表示const char*
<2> char (*p)[n] = &array; // array表示char [n]
<3> char (&p)[n] = array; // array表示 char (&)[n]
<4> void foo(char a[n]); foo(array); // array表示const char*
<5> void foo(char (&a)[n]); foo(array); // array表示char (&)[n]
<6> void foo(char (*a)[n]); foo(&array); // array表示 char [n]
<7> char *p; array = p; // "error C2440,无法从char*转化为char [n]", // 因此array表示char [n]
<8> char other[n]; array = other; // "error C2106, '='左操作数必须为L值", // 因此array表示char [n]
<9> long i = 0; (long &)array = i; //实际改变的不是array本身的值,而是它代表 // 的数组中的头4个元素(32位), // 因此array代表的是char [n] 
|