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

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

[复制链接]
发表于 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]
发表于 2007-12-11 15:39:58 | 显示全部楼层
数组的声明吧,p也是一个int数组。
 楼主| 发表于 2007-12-11 17:44:25 | 显示全部楼层
*p 沒寫成 *p[] 這樣啊。。。。 [s:6]
发表于 2007-12-11 18:30:47 | 显示全部楼层
数组名其实就是一个指针值。把如果把指针看做是以地址为值的变量的话,数组可以被当作是常量指针。这就和函数名与函数指针的关系差不多的样子,再具体的,我也说不清楚,得等高手来了。

ps.
int  *p={a[0],a[1]};
这样的写法在我的dmc编译器下无法通过,不知道别的编译器怎么样。
发表于 2007-12-11 20:36:25 | 显示全部楼层
标准下:
int* p = a[0] 才允许属于直接指向数据内存的地址,
而{ a[0], a[1] }是需要使用 int* p[] = 来初始化的,偶恐怕那个是漏写了……

比较弱的编译器会不能够区分(不过大部分都会至少来个warning罢^^)
下去试试才知道,偶也不乱猜了XD
发表于 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: 初始值设定项太多
发表于 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[]才能通过
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-11-6 16:43 , Processed in 0.011374 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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