//pointer_to_pointer = bi_array+1;//错误cannot convert from 'int (*)[3]' to 'int ** '
/*******************以上说明二维数组和二维指针不是等价的,不能相互赋值*************************************************/
pointer_to_pointer = pointer_array;
/*******以上这句说明指针数组*[] 可以转换为二级指针** 他们相互等价*****************************************************/
//pointer = bi_array;//错误cannot convert from 'int [3][3]' to 'int *'
pointer = (int *)bi_array;
for(i=0;i<9;i++)
{
printf("%d\t",pointer[i]);
}
printf("\n");
//pointer = array_pointer;//错误cannot convert from 'int (*)[3]' to 'int *'
pointer = (int *)array_pointer;
for(i=0;i<9;i++)
{
printf("%d\t",pointer[i]);
}
printf("\n");
for(i=0;i<9;i++){pointer[i] = 9;} //此时指向bi_array的array_pointer的元素被pointer修改为9
array_pointer = (int(*)[3])pointer;
print(array_pointer,3,3);
/********以上说明二维数组名和数组指针虽然是一个指针,但编译器并不理解,对他来说是数组类型的指针,但可以类型强制转换*****/
for(i=0;i<3;i++)
{
pointer_array[i] = bi_array[i];
}
printf("\n");
print((int(*)[3])pointer,3,3);
print(pointer_to_pointer, 3 ,3);
print(pointer_array, 3, 3);
return 0;
}
对二维数组做如下总结:
1.二维数组和二维指针不是等价的,不能相互赋值
2.指针数组*[] 可以转换为二级指针** 他们相互等价
3.二维数组名和数组指针虽然是一个指针,但编译器并不理解,对他来说是数组类型的指针,但可以类型强制转换
pointer = (int *)array_pointer; array_pointer = (int(*)[3])pointer; pointer = (int *)bi_array;
4.如果想用函数传递二维数组,一般形参用二级指针**p或指针数组*[],可以支持二级指针和指针数组的实参传递,特殊的还可以用(*p)[N]
------------------------------分割线------------------------------
C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码
将C语言梳理一下,分布在以下10个章节中:
Linux-C成长之路(十):其他高级议题