C语言如何用指针的指针打印二维数组?

2013-08-04 10:28:11 +08:00
 itfanr
如 :

int a [3] [2] = {{1,2},{3,4},{5,6}} ;

函数原型;

void myPrint (const int **vect, int row, int col) ;

不采用这样的原型:

void myPrint(const int (*p)[2], int row) //当然此处row = 3 这种函数不灵活

谢谢啦~~~~~~~~~
2130 次点击
所在节点    C
30 条回复
xiaoye5200
2013-08-06 14:08:07 +08:00
void myPrint(const int *vect, int len)
{
int i=0;
for(;i<len;i++)
printf("%d",*vect++);
}

int main()
{
int a [3] [2] = {{1,2},{3,4},{5,6}} ;
myPrint(&a[0][0],sizeof(a)/sizeof(int));
}

为什么都喜欢用双重循环呢
itfanr
2013-08-06 16:12:01 +08:00
@xiaoye5200 指针的指针呢
jiych
2013-08-06 17:31:53 +08:00
@pright 是的,多谢提醒
printf("%p ", vect+i);改为 printf("%p ", (const int*)vect+i);就可以了
xiaoye5200
2013-08-06 18:24:32 +08:00
@itfanr 关键没必要用指针的指针
Gal3rielol
2013-08-07 00:01:57 +08:00
@xiaoye5200 指针的指针是错误的, 不是没必要而是错误的.
xiaoye5200
2013-08-07 02:33:46 +08:00
@Gal3rielol

1,lz要的其实是如下代码。
2,指针的指针当然不是错的。

#include <stdio.h>

void myPrint (int **vect, int row, int col)
{
int (*p)[2]=(int(*)[2]) vect;
for (int i=0; i<row; i++)
for (int j=0; j<col; j++)
printf("%d\n",p[i][j]);
}


int main(int argc, const char * argv[])
{
int a [3] [2] = {{1,2},{3,4},{5,6}} ;
myPrint((int**)a, 3, 2);
return 0;
}
itfanr
2013-08-07 10:30:20 +08:00
@xiaoye5200 额 不是有没有必要 我只是有个疑惑,大家帮忙而已啊
Gal3rielol
2013-08-07 10:48:29 +08:00
@xiaoye5200 既然你说指针的指针是对的又为什么要强转呢?
pright
2013-08-07 14:10:55 +08:00
@itfanr 因为标准是这样的,某类型的数组只会转换为该类型的指针,对应二维数组只会转换为一维数组指针,int[3][2]->int(*)[2]。所以要么按内存排布自己处理,要么强转回原始类型
729 Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type “array of type” is converted to an expression with type “pointer to type” that points to the initial element of the array object and is not an lvalue.
http://c0x.coding-guidelines.com/6.3.2.1.html
itfanr
2013-08-07 21:22:14 +08:00
@pright 你说的非常对 嗯嗯

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX