august 发表于 2007-12-11 09:16:42

又是指針問題


int   a={{1,2,3},{4,5,6}};

int*p={a,a};


這個應該怎麼理解呢?怎麼可以這樣的?

shawind 发表于 2007-12-11 15:39:58

数组的声明吧,p也是一个int数组。

august 发表于 2007-12-11 17:44:25

*p 沒寫成 *p[] 這樣啊。。。。

shawind 发表于 2007-12-11 18:30:47

数组名其实就是一个指针值。把如果把指针看做是以地址为值的变量的话,数组可以被当作是常量指针。这就和函数名与函数指针的关系差不多的样子,再具体的,我也说不清楚,得等高手来了。

ps.
int*p={a,a};
这样的写法在我的dmc编译器下无法通过,不知道别的编译器怎么样。

lw 发表于 2007-12-11 20:36:25

标准下:
int* p = a 才允许属于直接指向数据内存的地址,
而{ a, a }是需要使用 int* p[] = 来初始化的,偶恐怕那个是漏写了……

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

lw 发表于 2007-12-11 20:39:10


void main(void)
{
    int a = { {1, 2}, {3, 4}, };
    int* p[] = { a, a };
    int* p = { a, a };
}


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

lxhbs 发表于 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[]才能通过
页: [1]
查看完整版本: 又是指針問題