C/C++中數(shù)組名的含義

字號:

C/C++中的數(shù)組名是個很奇怪的東西,它到底代表什么呢?
    對于char array[n](n是一個常數(shù)),大概有這么幾種語義:
    <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*轉(zhuǎn)化為char [n]",
     // 因此array表示char [n]
    <8> char other[n];
     array = other; // "error C2106, ’=’左操作數(shù)必須為L值",
     // 因此array表示char [n]
    <9> long i = 0;
     (long &)array = i; //實際改變的不是array本身的值,而是它代表
     // 的數(shù)組中的頭4個元素(32位),
     // 因此array代表的是char [n]