指针**p对二维数组的控制有两种方式????

whmouse 2003-05-08 12:01:31
/* C 语言例子 */

void main()
{
int multarr[][4] = {1,2,3,4,5,6,7,8};
int **pt = multarr;
int i,k;
for(i=0; i<2; i++)
{
for(k=0; k<4; k++)
printf("%-4d",*pt++);
printf("\n");
}
}

在以上例子中,若将
int **pt = multarr ===> int *pt = multarr;
也得到相同的结果。

请问两者有何不同,哪个是正确的??
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
luohualiushui 2003-05-08
  • 打赏
  • 举报
回复
具体问题具体分析
但是第二种方法当然是不能用的
qingfang 2003-05-08
  • 打赏
  • 举报
回复
我认为
  int *pt = multarr;
是正确的.

int **pt = multarr; // 式1
int *pt = multarr; // 式2

在 式1 条件下,实际上输出的是:指针的地址.
在 式2 条件下,输出的才是:指针的所指的值.
之所以在你的程序中,这两个都好用,是因为 int 是4个字节,指针也是4个字节。
不信的话,你可以将 int 改为 short, 你就会发现不好用了。
原因是 short 是2个字节,而指针是4个字节。

whmouse 2003-05-08
  • 打赏
  • 举报
回复
To luohualiushui(落花流水):
那如何用指针控制二维(或多维)数组?
maurice1983 2003-05-08
  • 打赏
  • 举报
回复
两个都不行!
??
不知道你的结果是怎么得来的?
我想你的意思是不是:
#include <stdio.h>

void main()
{
int multarr[][4] = {1,2,3,4,5,6,7,8};//你的附值有问题
int (*pt)[4] = multarr;//这里不同!
int i,k;
for(i=0; i<2; i++)
{
for(k=0; k<4; k++)
printf("%-4d",*pt++);
printf("\n");
}
}
whmouse 2003-05-08
  • 打赏
  • 举报
回复
需要添加头文件
<stdio.h>
我在TC中编译的。
luohualiushui 2003-05-08
  • 打赏
  • 举报
回复
int *pt = multarr 情况:
编译器把数组的首地址赋给pt,所以*pt++就像是在遍历一维数组一样,输出结果正确
int **pt = multarr 情况:
编译器也把数组的首地址赋给pt,但是这时候*pt的内容为1,**pt的内容就不知道是什么了
*pt++把pt前移sizeof(int*)个字节,恰好和int的字节相同,都是4个。所以*pt++就是2,输出也正确,但是逻辑上是错的。

dev-c++中有warning
forestbear 2003-05-08
  • 打赏
  • 举报
回复
在TC++中通不过编译。。。。。。。。。。

69,382

社区成员

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

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