求教:数组名和函数名问题
有如下代码段:
int myArray[3] = { 1, 2, 3 };
cout << myArray << endl;
cout << &myArray <<endl;
输出的结果为同一个地址,为什么呢?
类似的,有:
void myFunc()
{
// Empty function body.
}
cout << myFunc << endl;
cout << &myFunc << endl;
输出结果也是同一个地址,为什么呢?
数组名和函数名不是已经代表地址了吗?为什么还需要再做取地址运算,并且值还是一样的?
坐等大神回复!
[解决办法]
变量名、函数名、数组名其实都是内存单元地址,是一个固定值:
变量名:实际上是一个符号地址,在对程序进行编译连接时由系统给
每一个变量名分配一个内存单元地址!
函数名:代表函数在内存中的入口地址
数组名:代表数组元素的起始内存单元的地址,即第一个元素的地址。
赋值语句(=)和参数值传递时,对它们的处理方式不同:
处理“变量名”时,是把它所代表的内存单元中的内容赋过去,
处理 “函数名、数组名”则是把它所代表的内存单元地址赋过去
函数名与数组名都是“常数地址”,按道理是不能再“取地址”的,
编译系统做了“容错”处理,就是把“取常数地址的地址”与“常数地址”
等价成一回事,如把 &hello处理成与 hello等同 , 所以,它们是一样的,
编译程序这样做是故意的行为,仅仅是为了“容错”