幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2648|回复: 6

[通用编程] 又是指針問題

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-12-11 09:16:42 | 显示全部楼层 |阅读模式
  1. int   a[2][3]={{1,2,3},{4,5,6}};
  2. int  *p={a[0],a[1]};
复制代码

這個應該怎麼理解呢?怎麼可以這樣的?[s:8]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-12-11 15:39:58 | 显示全部楼层
数组的声明吧,p也是一个int数组。
え~え~お!!!
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-12-11 17:44:25 | 显示全部楼层
*p 沒寫成 *p[] 這樣啊。。。。 [s:6]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-12-11 18:30:47 | 显示全部楼层
数组名其实就是一个指针值。把如果把指针看做是以地址为值的变量的话,数组可以被当作是常量指针。这就和函数名与函数指针的关系差不多的样子,再具体的,我也说不清楚,得等高手来了。

ps.
int  *p={a[0],a[1]};
这样的写法在我的dmc编译器下无法通过,不知道别的编译器怎么样。
え~え~お!!!
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-12-11 20:36:25 | 显示全部楼层
标准下:
int* p = a[0] 才允许属于直接指向数据内存的地址,
而{ a[0], a[1] }是需要使用 int* p[] = 来初始化的,偶恐怕那个是漏写了……

比较弱的编译器会不能够区分(不过大部分都会至少来个warning罢^^)
下去试试才知道,偶也不乱猜了XD
Style-C
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-12-11 20:39:10 | 显示全部楼层
  1. void main(void)
  2. {
  3.     int a[2][2] = { {1, 2}, {3, 4}, };
  4.     int* p[] = { a[0], a[1] };
  5.     int* p = { a[0], a[1] };
  6. }
复制代码

aa.c(5) : error C2372: “p”: 重定义;不同的间接寻址类型
        aa.c(4) : 参见“p”的声明
aa.c(5) : error C2078: 初始值设定项太多
Style-C
回复 支持 反对

使用道具 举报

0

主题

6

帖子

1289

积分

⑥精研

积分
1289
QQ
发表于 2007-12-20 14:23:22 | 显示全部楼层
Compiling...
1.c
H:\\Program\\C\\1220_1\\1.c(5) : error C2078: too many initializers
Error executing cl.exe.


嗯,应该使用*p[]才能通过
3Days汉化组&DCPC汉化组&H2O汉化坑·lxhbs
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-29 14:51 , Processed in 0.037640 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表