| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 946 人关注过本帖
标题:=数组和指针的问题
只看楼主 加入收藏
tinjp
Rank: 5Rank: 5
等 级:职业侠客
帖 子:52
专家分:340
注 册:2006-11-4
收藏
得分:0 
int *p[]={1,3,5,7,9}; *p[]就像4楼说的,它是指向指针数组的,所以元素不应该是整型变量,而应该是指针变量。
int a[5];*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};这个应该明白了吧。
int *p[5]和int (*p)[5]有什么不同?(*p)[5]是一个指向包含5个整形元素数组的指针。
int b[4][6],*p[6];为什么p=b;是正确的赋值语句 而把b[4][6]改成b[4][5]就不是正确的赋值语句了呢?b[4][6]可以看成4行6列的二维数组,*p[6]指向包含六个指针变量的数组,所以正好是b[4][6]的一行。p就可以看成b的一行。
2009-07-27 16:55
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
以下是引用文武两边随在2009-7-27 16:50的发言:

那int (*p)[3]=&a;和int (*p)[3]=a; 有什么区别?
问题不弄清楚睡不着觉啊,请指教。。。。。



因为你的a是一维数组, 所以才有int (*p)[3]=&a这样才赋值兼容.这个时候int (*p)[3]=a会发生错误.

如果你定义的是a[1][3]就必须int (*p)[3]=a而不能int (*p)[3]=&a了.

建议你仔细看看int (*p)[3]所代表的含义, 他是指向一个多维数组的指针. 每行有三个整型元素.

[[it] 本帖最后由 godbless 于 2009-7-27 17:04 编辑 [/it]]
2009-07-27 17:03
文武两边随
Rank: 2
等 级:论坛游民
帖 子:40
专家分:39
注 册:2009-7-23
收藏
得分:0 
哦,我看了下书,可以这样理解?
(*p)[3]是一个可以指向包含3个元素的数组的指针
p指的对象是整个数组   而不具体指向数组里的某个内容
假设指向一维数组而且定义p=a ;a是一个一维数组的名称,也就是首地址 代表&a[0] 而p是指向一个数组  并不具体到某个值某个位置。
所以不兼容。
如果是二维数组
p=a ; 此时a并不代表首地址 而是代表a[0]这一行 它包含3个元素a[0][0],a[0][1],a[0][2];
刚好和p对应 所以正确
假设p=a+1就代表p指向a[1]这一行的3个元素
我理解的是对的?
2009-07-28 08:29
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
回复 13楼 文武两边随
正确,看来是下功夫了,这个时候的p+1跳过的不是一个数组元素,而是一行...
2009-07-28 08:48
流浪人
Rank: 1
等 级:新手上路
帖 子:17
专家分:1
注 册:2009-7-6
收藏
得分:0 
(*p)[3]=&a表示变量a的地址赋给(*p)[3];
(*p)[3]=表示变量a的值赋给(*p)[3];
2009-07-28 11:17
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
收藏
得分:0 
最后一个不懂,我的理解是这样
int b[4][6],*p[6];那么p是这个指针数组的首地址吧,怎么能够给p赋值,让p=b?如果要给指针数组里面的元素赋初值,那么也应该是*(p+i)=b或者是p[i]=b
另外,b是二维数组的首地址,应该是行指针,我试过这种形式就不会编译有错:
 int b[4][6],(*p)[6];
 p=b;// p是行指针   
 或者这样
int b[4][6],*p[6];  
p[0]=b[0];//p[0], b[0]都是元素指针

唯有天道恒在,往复循环,不曾更改。。。
2009-07-29 03:43
grinner
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-7-5
收藏
得分:0 
int *p[]={1,3,5,7,9};是错误的说明语句,为什么是错的?
int a[5];*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};是正确的说明语句,为什么是对的?
int *p[5]和int (*p)[5]有什么不同?
int b[4][6],*p[6];为什么p=b;是正确的赋值语句 而把b[4][6]改成b[4][5]就不是正确的赋值语句了呢?
请教!
int *p[]={1,3,5,7,9};定义了一个数组名是p的指针数组(指针数组是指针变量的集合。每个元素都是指针变量~具有相同的存储类别和指向相同的数据类型)这里错在(1,3,5,7,9不是地址)
int a[5];*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};(a[5]普通的数组(整型长度是5) *num[5]是指针数组(整形长度是5)&a[0],&a[1],&a[2],&a[3],&a[4]都是地址~~
int *p[5]和int (*p)[5]第一个是一个整型的指针数组长度是5 第二个是制向函数的指针变量(第二个a指向一个返回整型值的函数)

最后的问题我觉的应该把*p[6该为*p[4]
2009-07-29 10:37
快速回复:=数组和指针的问题
数据加载中...
 
   



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

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