二维数组 与 指向指针的指针

zhangyanfei01 2009-09-17 08:20:02
偶在VC下定义了:
int a[3][3]={...}
int **p;
p = a; //编译出错

结果提示第三行编译出错!而在一维下却能通过,如下
int a[3]={...}
int *p;
p = a;
...全文
93 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liem 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhangyanfei01 的回复:]
偶在VC下定义了:
int a[3][3]={...} //a是二维数组,即元素是数组的数组。其名a是首元素a[0](是个数组)的指针&a[0],这是指向有三个int型元素数组的指针
int **p; //p是指向整型指针的指针
p = a;  //编译出错 p与a的类型不匹配,不能赋值

结果提示第三行编译出错!而在一维下却能通过,如下
int a[3]={...} //数组名a是数组首元素a[0]的指针(&a[0]),a[0]是个整型数据
int *p; //p是指向整型的指针变量,可以存放一个整型(首)地址
p = a; //p与a类型相同,因此可以可以赋值。
[/Quote]

要想用指针来操纵二维数组,方法有多种:
int a[3][3]={...};
1) int (*p)[3];//p是一个指针,指向有3个整型元素的数组
p=a;
用p访问元素方法:
a[i][j]===*(a[i]+j)===*(*(a+i)+j)===*(*(p+i)+j)===*(p[i]+j)===p[i][j]

2) int *p;
p=a[0];//即p=&a[0][0]
a[i][j]===*(a[i]+j)===*(a[0]+i*3+j)===*(p+i*3+j)
aizibion 2009-09-17
  • 打赏
  • 举报
回复
如果你真得很想要。。。

p = (int**)a可以满足你
pingjinzhao 2009-09-17
  • 打赏
  • 举报
回复
不管是几位数组名都不过是一个一级的指针而已,只不过其指向的类型不同
starcat 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhangyanfei01 的回复:]
结果提示第三行编译出错!而在一维下却能通过,如下
int a[3]={...}
int *p;
p = a;

[/Quote]hoho,想起我几个月前也遇到过这种问题
thecrypig 2009-09-17
  • 打赏
  • 举报
回复
如果要把3二维数组中的数取出来的话按上面的写
晨星 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 brookmill 的回复:]
int a[3][3]={...}
int (*p)[3];  // p是一个指向一维数组的指针,该数组是int型、有3个元素。
p = a;  //这个可以编译
[/Quote]
对,这一种意义就一致了。
thecrypig 2009-09-17
  • 打赏
  • 举报
回复
#include "stdio.h"
main()
{
int a[2][3]={{1,2,4},{51,5,8}} ;
int *p,i,j,b;
for(i=0;i<2;i++)
{
p=&a[i];
printf("%d\n",p[0]);
printf("%d\n",p[1]);
printf("%d\n",p[2]);

}

}


1
2
4
51
5
8
Press any key to continue...
brookmill 2009-09-17
  • 打赏
  • 举报
回复
int a[3][3]={...}
int (*p)[3]; // p是一个指向一维数组的指针,该数组是int型、有3个元素。
p = a; //这个可以编译
晨星 2009-09-17
  • 打赏
  • 举报
回复
一维int数组中,数组名表示第一个int的首地址,当然可以用转换成int*类型的指针类型。
而二维数组a[3][3]中,数组名表示第一组三元数组的首地址,但int**表示的却不是这个意思,它只是表示一个指向一级指针的指针,而并没有什么指向三元四元五元六元……数组的意思,所以这个不能直接转换。
eijikayn 2009-09-17
  • 打赏
  • 举报
回复
对二维其实只要和一维一样就好了,int *p ;p=a;
数组名就是地址,不必用int**p,这个是指向指针的指针,你要么就*p = a
fice1989 2009-09-17
  • 打赏
  • 举报
回复
不是int **P;
应该为int *p;
a也是个指针,int *p定义出的p也是指针
如果按你写的p就是一个2级指针了,与a的类型不符

69,369

社区成员

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

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