| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1994 人关注过本帖
标题:[求助]这个指针定义是什么意思
只看楼主 加入收藏
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
收藏
得分:0 
以下是引用菜鸟11号在2006-11-1 21:16:29的发言:
那么为什么这个程序出错
main()
{ int i;
int (*array)[3];
int a[]={1,2,3};
array=a;
for(i=0;i<3;i++)
printf(" %d",*(array+i));
}
应该输出
1 2 3
但是它输出
46 40 34

上面的程序有两个错误:1。a 应该定义为二维数组 2。*(array+i))代表的是地址,应该是*(*(array+i))
main()
{ int i;
int (*array)[3];
int a[3][3]={1,0,0,2,0,0,3,0,0};
array=a;
for(i=0;i<3;i++)
printf(" %d",*(*(array+i)));
}



新王登基,血流成河!
2006-11-02 00:00
hackboyo
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2006-10-27
收藏
得分:0 
以下是引用菜鸟11号在2006-11-1 21:16:29的发言:
那么为什么这个程序出错
main()
{ int i;
int (*array)[3];
int a[]={1,2,3};
array=a;
for(i=0;i<3;i++)
printf(" %d",*(array+i));
}
应该输出
1 2 3
但是它输出
46 40 34

如果你改成这样,输出的结果会是1 2 3
int(*array)[3]改成int *array
我想是int(*array)[3]在作怪!~

2006-11-02 00:06
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
收藏
得分:0 
呵呵关键是楼主发帖的目的是要怎么用(*array)[3]这个变量 改了就没意思了撒

新王登基,血流成河!
2006-11-02 00:10
Dweng
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2006-10-31
收藏
得分:0 
看书哦,基础知识

就喜欢钓鱼
2006-11-02 10:19
zzsy04et138
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2006-10-18
收藏
得分:0 

十一楼的程序是否说明了(*array)[3]指向的是一个二维数组?


2006-11-02 10:46
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
int (*ptr)[3] //p是指针变量哦 指向的是一个一维数组 数组里含有3个元素,如

int *ptr[3]; //这个是指针数组,保存的是3个指针元素(指向整形的)


还没体会出区别嘛? 下边那个比较好理解 说说上面那个吧

int ptr[4]//熟悉吧 是个包含4个整形元素的一维数组
int (*ptr)[4] //显然也是数组包含的也是4个整形变量,但是*ptr包含的哦 所以ptr是行指针 一维嘛..这说明ptr只对行进行操作的
比如 给你个二维数组:

1 2 3 4

5 6 7 8

0 0 0 0
定义(*ptr)[4] 并指向这个二维数组,刚讲过,(*ptr)[4]是指向一维数组,所以其操作只是对行进行操作

如 *ptr 值为1 一维数组首地址
*(ptr+1) 值为5 下个一维数组首地址
*(ptr+2) 只为0 再下一个一维数组首地址
//因为其只对行操作的

要想指向一行中其他元素当然可以:
如*(*(ptr+1)+2) 指向的就是7

这里要说明一下*(ptr+1)+2 中的1 和2 代表的含义
1: 是下一行一维数组,如果一个元素占2个字节 那么*(ptr+1) 比*ptr多 4×2=8个字节
2: 是当前数组的第几列 加2 说明是比*(ptr+1)多3×2=6个字节

借用wyzn12 的程序可以描述他们的:

main()
{ int i;
int (*array)[3];//指向一维数组
int a[3][3]={1,0,0,2,0,0,3,0,0};//二维
array=a;//把首地址赋给array,所以array就可以操作数组的第一行第二行第三行,即每行的一位数组
for(i=0;i<3;i++)
printf(\" %d\",*(*(array+i)));//上面写完这就懂了吧 array+i 是第i-1行的首地址
}

[此贴子已经被作者于2006-11-2 11:16:11编辑过]


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-11-02 11:14
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
收藏
得分:0 
以下是引用zzsy04et138在2006-11-2 10:46:23的发言:

十一楼的程序是否说明了(*array)[3]指向的是一个二维数组?

我觉得(*array)[3]是用来对二维数组a[n][m]操作,如果你想操作一个一维数组a[n]直接用*array,简单明了

[此贴子已经被作者于2006-11-2 12:49:26编辑过]


新王登基,血流成河!
2006-11-02 12:47
菜鸟11号
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-10-15
收藏
得分:0 

的确是二维数组的定义,请参考这篇文章:

[URL=http://softmyth.bokee.com/viewdiary.10911321.html]http://softmyth.bokee.com/viewdiary.10911321.html[/URL]
2006-11-05 10:06
菜鸟11号
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-10-15
收藏
得分:0 

谢谢楼上各位的帮助

2006-11-05 10:06
hopefully
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-5-31
收藏
得分:0 

我也正在想。

2006-11-05 11:02
快速回复:[求助]这个指针定义是什么意思
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019907 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved