| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:动态分配内存问题,求指教!!
只看楼主 加入收藏
may大象
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2013-5-30
结帖率:87.5%
收藏
已结贴  问题点数:5 回复次数:9 
动态分配内存问题,求指教!!
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    int *a;
    int n,i;
    scanf("%d",&n);
    a=calloc(n,sizeof(int));
    for (i=0;i<n;i++)
        a[i]=i;
    for(i=0;i<n;i++)
        printf("%2d",a[i]);
    printf("\n");
    return 0;
}

为什么会出现错误呢?主要是红色那句,自己搞不懂啊。。。麻烦指点一下,谢谢。。。
搜索更多相关主题的帖子: include 动态 
2013-07-31 09:26
幽灵X
Rank: 5Rank: 5
等 级:职业侠客
帖 子:128
专家分:328
注 册:2013-1-28
收藏
得分:5 
红色那句改为a=(int*)calloc(n,sizeof(int));
2013-07-31 09:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
你得告诉别人是什么错误。
如果我是你,我会贴出代码后,并说明 在某某编译器上编译,a=calloc(n,sizeof(int)) 编译报错,报错信息为:error C2440: '=' : cannot convert from 'void *' to 'int *'

这样别人就会告诉你:你写的是C代码,却以C++方式编译,牛头不对马嘴。
2013-07-31 10:13
幽灵X
Rank: 5Rank: 5
等 级:职业侠客
帖 子:128
专家分:328
注 册:2013-1-28
收藏
得分:0 
回复 3楼 rjsp
多谢版主教诲
2013-07-31 10:26
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
学习了
2013-07-31 10:27
may大象
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2013-5-30
收藏
得分:0 
回复 2楼 幽灵X
诶。。。这样真的行,为什么呢?

                             凡成大事者,各有各的方法论。
2013-08-02 23:02
may大象
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2013-5-30
收藏
得分:0 
回复 3楼 rjsp
啊,这样啊,版主,可是c++不是由C发展来的吗?C++应该也能编译C的吧?

                             凡成大事者,各有各的方法论。
2013-08-02 23:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用may大象在2013-8-2 23:05:13的发言:

啊,这样啊,版主,可是c++不是由C发展来的吗?C++应该也能编译C的吧?

C不是C++的子集,C++和C是两种独立发展的语言,差别多着呐

就以你提到的这一点而言
在 C语言 中规定 void*类型 可以隐式转化为任意类型指针,因此
int* a = calloc(n,sizeof(int)); 是正确的
而 int* a = (int*)calloc(n,sizeof(int)); 虽然不影响代码逻辑,但一切代码检查工具(一般人不会用到)都会将之定义为“冗余”逻辑错误
也就是C代码检查工具想不通代码加个冗余的(int*)干什么,因为必须跟左边类型保存一致,根本无法自由的写成其他类型指针。

在C++语言 中规定 0值 可以隐式转化为任意类型指针,因此
int* a = (int*)calloc(n,sizeof(int)) 才是正确的
C++无法保证一种类型一定能看成另一种类型,除非程序员自己来担保,强制类型就是这样一种担保手段。
2013-08-03 09:03
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
牢记linux之父大神说过的话...C++有太多非标准的程序员使用他...
呵呵...楼主,木有贬低你的意思...我只是看到楼上的回帖想感慨两句...

C语言的设计逻辑就是简单粗暴,而且设计之初就是给资深人士使用的...
里面有很多很多未定义操作
因为设计者假设使用C语言的人都是系统级程序员,清楚的知道自己每一步在干什么...


[ 本帖最后由 peach5460 于 2013-8-3 09:16 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-03 09:11
may大象
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2013-5-30
收藏
得分:0 
回复 8楼 rjsp
强大的版主,确实懂了,谢谢了,

                             凡成大事者,各有各的方法论。
2013-08-03 09:57
快速回复:动态分配内存问题,求指教!!
数据加载中...
 
   



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

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