xxwpk007 发表于 2008-7-8 10:42

关于指向数组的指针初始化的问题,谢谢帮忙

VC++6.0下编译

#include <stdio.h>
int main(void)
{
    int (*fp)[10];
    int num[10];
    fp = num;//这里错在哪呢?
    return 0;
}

编译器提示:

--------------------Configuration: Cpp2 - Win32 Debug--------------------
Compiling...
Cpp2.cpp
D:\c\Cpp2.cpp(6) : error C2440: '=' : cannot convert from 'int [10]' to 'int (*)[10]'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.

Cpp2.obj - 1 error(s), 0 warning(s)

后飞DE笨鸟 发表于 2008-7-8 10:44

这里是C,不是VC,换个地方问吧

界水乘风 发表于 2008-7-8 10:47

To 1#
虽然num,&num可能在数值上没什么区别,不过语法通不过的。
改成 fp = &num;

To 2#,
你哪里看出来的这是VC?就因为是用VC6编译的?

mqh21364 发表于 2008-7-8 10:49

看看错误提示,不说得很清楚吗?
不能把一个int[10]的数组赋值给一个指向同种类型的指针。 就好象这个样子:
int a = 10; int *b; b = a; 会报错一样。

其实最关键的就是,数组名在某种情况下,可以用作指向该数组的指针,但是并不代表它就是指向该数组的指针。

xxwpk007 发表于 2008-7-8 10:57

[quote][bo][un]界水乘风[/un] 在 2008-7-8 10:47 的发言:[/bo]

To 1#
虽然num,&num可能在数值上没什么区别,不过语法通不过的。
改成 fp = &num;

To 2#,
你哪里看出来的这是VC?就因为是用VC6编译的? [/quote]


#include <stdio.h>
int main(void)
{
        int i;
         int (*fp)[10];
         int num[10];
        fp = &num
        for(i = 0;i < 10;i++)
                num[i] = i;
        for(i = 0;i <10;i++)
                printf("%d ",num[i]);
        printf("\n");
        for(i = 0;i <10;i++)
                printf("%d ",fp[i]);
         return 0;
}
改成 fp = &num;后出现奇怪的数据
[attach]36087[/attach]

[[it] 本帖最后由 xxwpk007 于 2008-7-8 10:58 编辑 [/it]]

界水乘风 发表于 2008-7-8 11:16

还要好好理解一下数组指针啊,呵呵。

printf("%d ",(*fp)[i]);
或者
printf("%d ",*(*fp+i));

coming 发表于 2008-7-8 13:35

fp[]是一个指针数组,每一个元素都是指针,而它的头地址,fp是指针的地址,你用fp=num当然不对了,恩,应该是fp=&num,就像fp是一个**而num只是*,当然不能赋值,fp[]里存的是地址,你打印出来的当然是地址了,就像楼上说的 要用**

笨鸟学跑 发表于 2008-7-8 15:28

不知道我说的对不,那个程序我在WINTC下编译通过了
,至于三楼说我哪儿看出是VC,我记得C注释用/*   */吧,而VC好象是//

笨鸟学跑 发表于 2008-7-8 15:41

六楼说的对,FP[0]是数组NUM[]
的地址,而FP[1]则是跳过整个数组NUM[]后面的一个地址,FP[I],I每加一,则跳过10*INT,改写成以下就可以了
int main()
{
    int i;
    int (*fp)[10];
    int num[10];
    fp=&num;
    for(i=0;i<10;i++)
        num[i]= i;
    for(i=0;i<10;i++)
        printf("%d ",num[i]);
    printf("\n");
    for(i =0;i<10;i++)
        printf("%d ",*(*fp+i));
    getch();
}

笨鸟学跑 发表于 2008-7-8 15:43

fp=num;也可以,在WINTC中编译,可以在num前不加&

a383369542 发表于 2008-7-8 16:04

程序我们注重思想,数据库我们注重原理,生活我们注重感情。07级程序&&数据库QQ交流群48335578,欢迎志士的加入

独孤小梦 发表于 2008-7-8 23:20

9楼正解!
(*FP)[10]是个行的数组,每循环一次都要跨过NUM[10];所以每次要加I!
呵呵!看了本帖,在看书,几小时才回答上来了!
注:如有什么不对的话,请各位见晾!本人也是个新手!呵呵!

lingluoz 发表于 2008-7-9 08:32

指向数组的指针直接就是*p
(*p)[7] p为一个指向二维数组的指针

xxwpk007 发表于 2008-7-9 09:01

谢谢,LS的回答 现在终于搞懂了

笨鸟学跑 发表于 2008-7-9 11:46

13#说的有问题吧,(*p)[7]表示一个指针p指向一个数组,数组有7个元素才对吧

独孤小梦 发表于 2008-7-9 16:24

SL的错误,(*p)[7]这个是二维数组,而你说的只需要*p[7]这个就是一唯数组了!

页: [1]

编程论坛