数组的问题 求教
int arr[2][2]={{1,2},{3,4}}
数组名可以代表数组中的首地址 那么 arr就可以代表arr[0] arr[0]也可以看成是{1,2}这个数组的名字 也就是可以代表arr[0][0]那么 int *num=arr 为什么会不对 初学者 求赐教
[解决办法]
arr 是二维数组名
arr[0][0] 是数组中的第一个元素
虽然从内存地址来说,它们的地址是一样的
但在编译器看来,这是两种类型
同时,数组名和指针也是两种类型
只是作为函数参数时,数组名可以退化为指针
[解决办法]
创建一个二维数组
先创建行指针
char** p = new char* [10];
为每一行分配空间
for(int i=0; i<10;i++)
{
p[i] = new char[i];
}
用这个理解二维数组吧
[解决办法]
arr用于表达式或函数参数时一般会转化为指向第一个元素的指针,所以arr的类型是 int (*)[2];
[解决办法]
int arr[2][2]={{1,2},{3,4}};
int *num = arr是非法的。
//arr代表二维数组首元素的地址,在这里不是一个简单的整型元素,而是由2个整型元素所组成的一维数组,因此arr代表的是首行的首地址。
//所以,在int *num = arr中,左边num是一个指向整型变量的指针,右边是一个指向数组的指针,两种不同类型的指针是不能赋值的。
//你可以改成 int (*num)[2] = arr试试。