欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组名是地址么?它和地址的差异在哪里呢?

程序员文章站 2022-03-02 13:33:30
...
如果运算需要的话,所有的数组都存在到它元素的指针类型的右值的隐式类型转换。
说数组是本身就是地址是不科学的,而应该说数组能够自动的转化为指向他的元素的指针,这种转化是单向的,是一种退化,损失了原来数组的大小这个重要的信息。除了 sizeof 之外,其他运算符作用到数组上的时候,都要发生这种转化,即使取下标也不例外。
比如整型二维数组w[3][4],
先不要把 w 看作地址。把 w 看作三个四个元素的数组的组成的数组
sizeof(w) 不转化
sizeof(w+0) 转化
由于那么 w 是三个四个元素的数组组成的数组,那么它就可以隐式地转为指向四个元素的数组的指针.
w[0][0] = 0 两次转化
w = NULL 无法转化

#include <iostream>
using namespace std;

int main()
{
char a[3][4];

cout<<sizeof(a)<<endl;
//输出数组的大小:12

cout<<sizeof(a+0)<<endl;
//输出指针大小:4
//由于那么 a 是三个四个元素的数组组成的数组,
//那么它就可以隐式地转为指向四个元素的数组的指针

a[0][0] = 'a';//两次转化

return 0;
}