C/C++中数组名的含义

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航