| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3471 人关注过本帖
标题:关于指向数组的指针初始化的问题,谢谢帮忙
只看楼主 加入收藏
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
结帖率:100%
收藏
 问题点数:0 回复次数:15 
关于指向数组的指针初始化的问题,谢谢帮忙
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)
搜索更多相关主题的帖子: 指针 
2008-07-08 10:42
后飞DE笨鸟
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-7-8
收藏
得分:0 
这里是C,不是VC,换个地方问吧
2008-07-08 10:44
界水乘风
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-07-08 10:47
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
看看错误提示,不说得很清楚吗?
不能把一个int[10]的数组赋值给一个指向同种类型的指针。 就好象这个样子:
int a = 10; int *b; b = a; 会报错一样。

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

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-07-08 10:49
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
收藏
得分:0 
[bo][un]界水乘风[/un] 在 2008-7-8 10:47 的发言:[/bo]

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

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



#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;后出现奇怪的数据
图片附件: 游客没有浏览图片的权限,请 登录注册


[[it] 本帖最后由 xxwpk007 于 2008-7-8 10:58 编辑 [/it]]
2008-07-08 10:57
界水乘风
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-07-08 11:16
coming
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2008-4-20
收藏
得分:0 
fp[]是一个指针数组,每一个元素都是指针,而它的头地址,fp是指针的地址,你用fp=num当然不对了,恩,应该是fp=&num,就像fp是一个**而num只是*,当然不能赋值,fp[]里存的是地址,你打印出来的当然是地址了,就像楼上说的 要用**
2008-07-08 13:35
笨鸟学跑
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-7-8
收藏
得分:0 
不知道我说的对不,那个程序我在WINTC下编译通过了
,至于三楼说我哪儿看出是VC,我记得C注释用/*   */吧,而VC好象是//
2008-07-08 15:28
笨鸟学跑
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-7-8
收藏
得分:0 
六楼说的对,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-07-08 15:41
笨鸟学跑
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-7-8
收藏
得分:0 
fp=num;也可以,在WINTC中编译,可以在num前不加&
2008-07-08 15:43
快速回复:关于指向数组的指针初始化的问题,谢谢帮忙
数据加载中...
 
   



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

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