唉,指向二维数组的指针,又错,又错

napoleonpan 2003-08-19 11:12:16
//这个程序错在哪里?
#include<iostream.h>
void f1(int (*t)[4],int n)//打印第n行
{
int i;
for(i=0;i<4;i++)
{
cout<<*(*(t+n)+i);
}
}
void main()
{
int a[3][4]={{1,2,3,4},
{5,6,7,8},
{9,0,1,2}};
int *p;
p=*(a+0);
f1(p,2);//错误显示:cannot convert int* to int(*)[4]
}
...全文
29 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
napoleonpan 2003-08-19
  • 打赏
  • 举报
回复
偶懂兄弟的意思,是说解决这类问题关键在于抓住地址
napoleonpan 2003-08-19
  • 打赏
  • 举报
回复
我明白了,兄弟这样做是用一维的方法解决二维的问题
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
无论数组是几维的、指针是几维的,他们的本质都只是地址!
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
楼主明白了吗?!
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
#include<iostream.h>
void f1(int *p,int n,int m)//白杨说的函数的参数里只用指针就可以,可我怎么改都好像不行啊
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cout<<p[i*m+j];
}
void main()
{
int a[3][4]={{1,2,3,4},
{5,6,7,8},
{9,0,1,2}};
f1(a[0],3,4);
}
sharkhuang 2003-08-19
  • 打赏
  • 举报
回复
gz
Jinhao 2003-08-19
  • 打赏
  • 举报
回复
上面这个程序没有错撒
napoleonpan 2003-08-19
  • 打赏
  • 举报
回复
ok,我的错,*(a+0)是第0行第0元素的地址
偶用的就是老潭写的书,最近才看到指向二维数组的指针,一直糊里糊涂的.
我的程序可以简化为:
#include<iostream.h>
void f1(int (*t)[4],int n)//白杨说的函数的参数里只用指针就可以,可我怎么改都好像不行啊
{
int i;
for(i=0;i<4;i++)
{
cout<<*(*(t+n)+i);
}
}
void main()
{
int a[3][4]={{1,2,3,4},
{5,6,7,8},
{9,0,1,2}};
f1(a,2);
}
hongfeeling 2003-08-19
  • 打赏
  • 举报
回复
*(a+0)不是取第0行的首地址吗?
绝对错误的概念
a+0是
*(a+0) == a[0]
看看谭老先生的经典C语言教程,里面详细解释.

jack_wq 2003-08-19
  • 打赏
  • 举报
回复
第一:f1函数里参数不要用数租,指针即可
第二:指向二维数租完全可以用一维指针,你的引用方式不对

int *p;
p=a;即可获得二维数组的首地址
napoleonpan 2003-08-19
  • 打赏
  • 举报
回复
//调试成功,但是..........
#include<iostream.h>
void f1(int (*t)[4],int n)
{
int i;
for(i=0;i<4;i++)
{
cout<<*(*(t+n)+i);
}
}
void main()
{
int a[3][4]={{1,2,3,4},
{5,6,7,8},
{9,0,1,2}};
int (*p)[4];
p=(a+0);//为什么此处要把前面的*去掉才行.(此处相当于p=a);*(a+0)不是取第0行的首地址吗?
f1(p,2);
}
LoopyPuzzle 2003-08-19
  • 打赏
  • 举报
回复
你的p只是一维指针啊。怎么能够传给做二维指针的t呢?

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧