怎样定义一个存放指向数组的指针的数组

问题描述:

怎样定义一个存放指向数组的指针的数组
/*
*/
#include
int main()
{
\x09int a[2][2] = {{1,2},{3,4}};
\x09int b[2][2]= {{5,6},{7,8}};
\x09int (*p1)[2] = a;\x09\x09\x09//定义了一个指向一维数组的指针
\x09int (*p2)[2] = b;\x09\x09\x09//定义了一个指向一维数组的指针
\x09//int ((*q)[2])[2] = {p1,p2}; //本来想这样定义的,可是不能通过编译,
\x09//int ___q____ = {p1,p2}; //请帮助填一个正确的定义 :这行q的前后应该怎么填
\x09//printf("%d\n",*(*q[1]+1)); //应该结果是6
\x09return 0;
}
1个回答 分类:综合 2014-12-07

问题解答:

我来补答
以下代码在VC6.0以上版本测试通过!
输出结果:6
#include
int main(void)
{
int a[2][2] = {{1,2}, {3,4}};
int b[2][2] = {{5,6}, {7,8}};
int (*p1)[2] = a;
int (*p2)[2] = b;
int (*q[2])[2] = {p1, p2}; 这样才是正确的定义!
printf("%d\n", *(*q[1]+1));
return 0;
}
但在tc2.0和bc3.1中提示非法初始化!
但把
int (*q[2])[2] = {p1, p2};
改成
int (*q[2])[2];
q[0] = p1;
q[1] = p2;
可以通过!
原因暂不清楚,估计是老旧的编译器不支持太复杂的定义!
其实最好的方法是使用typedef,简单明了,可读性大大提升!
#include
int main(void)
{
typedef int (*PA)[2]; 使用typedef
int a[2][2] = {{1,2}, {3,4}};
int b[2][2] = {{5,6}, {7,8}};
int (*p1)[2] = a;
int (*p2)[2] = b;
PA q[2]= {p1, p2}; 这样可读性是否大大的增加?!
printf("%d\n", *(*q[1]+1));
return 0;
}
再问: GCC 和tc2.0和bc3.1一样; typedef是最理想的方法;非常感谢,问题解决了。 能不能解释一下 int (*q[2])[2];,为什么不是int ((*q)[2])[2];
再答: 如果你明白()、[]、*三者的优先级,理解起来就没有什么困难了! 故 int ((*q)[2])[2]; 与 int (*q)[2][2]; 相同,都是定义__二维数组的指针__! 而 int (*q[2])[2]; 则不同,首先__q是数组__,有2个元素的数组!该数组的每个元素是一个指针, 这个指针指向有2个整型数据元素的数组! 如果你结合typedef就能很好的理解 以上。
 
 
展开全文阅读
剩余:2000
下一页:立体几何 24题