怎样定义一个存放指向数组的指针的数组
来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/28 17:43:22
怎样定义一个存放指向数组的指针的数组
/*
*/
#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;
}
/*
*/
#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;
}
以下代码在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就能很好的理解 以上。
输出结果: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就能很好的理解 以上。
怎样定义一个存放指向数组的指针的数组
如何定义一个函数 返回一个指向数组的指针
怎么定义指向三维数组的指针
指向二维数组的指针如何定义?
怎样定义由数组指针构成的数组
请教关于C中指针型数组:uint a,b,c,d; 我如果想定义一个数组p,指向上面的四个变量,怎样定义?
指向函数的指针与指向数组的指针的声明定义的写法
定义一个指针变量,使它指向数组的第一个元素?怎么实现?
一个函数指针数组p[],数组p共有4个元素,其元素指向返回double型值的函数.其定义形式正确的为
一个函数指针数组p[],数组p共有4个元素,其元素指向返回double型值的函数.其定义形式正确为
C语言中若定义数组和指向数组的指针,其中元素的地址可用哪几种方式表达?
请教C语言一道指向二维数组指针的题,