C/C++中的数组名是个很奇怪的东西,它到底代表什么呢?
对于char array[n](n是一个常数),大概有这么几种语义:
<1> char* const(注意不是const char*) <2> char [n]
举例如下:
<1> char *p = array; //array表示char* const,p得到的是数组的首地址
size_t size = sizeof(char [n]); // size等于n
<2> char (*p)[n] = &array; // array表示char [n],
// p得到的仍然是数组的首地址
char (*q)[n] = array; // 编译错误
char (*r)[n] = (char (*)[n])array; // r得到的是array数组的首地址
<3> char (&p)[n] = array; // array表示 char [n]
<4> void foo(char a[n])
{
int size = sizeof(a); // size == 4(32位系统),
// 因为a实际上表示的是char*
};
foo(array); // array表示char* const
<5> void foo(char (&a)[n]);
{
int size = sizeof(a); // siz