| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2032 人关注过本帖
标题:关于malloc问题
只看楼主 加入收藏
kechujian
Rank: 1
等 级:新手上路
帖 子:22
专家分:5
注 册:2011-3-17
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:13 
关于malloc问题
n个人围一圈报数,报到3的就退出,求最后一个人是原来的几号
#include<stdio.h>
#include<stdlib.h>
void main()
{
    int n,i,j,k;
    int*a;
    printf("input n:");
    scanf("%d",&n);
    a=(int*)malloc(n*sizeof(int));
    for(i=0;i<n;i++)
        *(a+i)=i+1;
    i=0;
    j=0;
    k=0;
    while(j<n-1)
    {
        if(*(a+i)!=0)k++;
        if(k==3)
        {
            k=0;
            *(a+i)=0;
            j++;
        }
        i++;
        if(i==n)i=0;
    }
    while(*a==0)a++;
    printf("the last one is:%d\n",*a);

}
这是没问题的,可是
#include<stdio.h>
#include<stdlib.h>
void main()
{
    int n,i,j,k;
    printf("input n:");
    scanf("%d",&n);
    int*a=(int*)malloc(n*sizeof(int));
    for(i=0;i<n;i++)
        *(a+i)=i+1;
    i=0;
    j=0;
    k=0;
    while(j<n-1)
    {
        if(*(a+i)!=0)k++;
        if(k==3)
        {
            k=0;
            *(a+i)=0;
            j++;
        }
        i++;
        if(i==n)i=0;
    }
    while(*a==0)a++;
    printf("the last one is:%d\n",*a);

}
这样就不行了,a指针那样分配内存空间有什么问题吗?下面是问题:
10.5.c(8) : error C2143: syntax error : missing ';' before 'type'
10.5.c(10) : error C2065: 'a' : undeclared identifier
10.5.c(10) : error C2100: illegal indirection
10.5\10.5.c(10) : error C2106: '=' : left operand must be l-value
10.5.c(16) : error C2100: illegal indirection
10.5.c(20) : error C2100: illegal indirection
10.5.c(20) : error C2106: '=' : left operand must be l-value
10.5.c(26) : error C2100: illegal indirection
10.5.c(27) : error C2100: illegal indirection
搜索更多相关主题的帖子: include 
2011-04-07 00:29
jackboos
Rank: 2
等 级:论坛游民
帖 子:21
专家分:37
注 册:2011-4-6
收藏
得分:0 
int*a=(int*)malloc(n*sizeof(int));
没发现这一句的含义是声明+初始化指针么?
C语言声明有一个什么要求?
2011-04-07 00:42
kechujian
Rank: 1
等 级:新手上路
帖 子:22
专家分:5
注 册:2011-3-17
收藏
得分:0 
声明+初始化指针?有问题吗?int i=1;
2011-04-07 01:32
jackboos
Rank: 2
等 级:论坛游民
帖 子:21
专家分:37
注 册:2011-4-6
收藏
得分:0 
C语言要求所有声明都在{的后面
新手是会非常频繁犯这个错误
函数()
{
    函数声明1;
    函数声明2;
    函数声明3;
        .
        .
        .

    定义1;
    定义2;
    定义3;
        .
        .
        .
    函数调用&赋值;
    return ;
}

[ 本帖最后由 jackboos 于 2011-4-7 01:38 编辑 ]
2011-04-07 01:35
kechujian
Rank: 1
等 级:新手上路
帖 子:22
专家分:5
注 册:2011-3-17
收藏
得分:0 
不理解, {  ??关于声明的资料出自哪里?我现在的书没有怎么提及声明问题
2011-04-07 01:42
jackboos
Rank: 2
等 级:论坛游民
帖 子:21
专家分:37
注 册:2011-4-6
收藏
得分:0 
你试试就明白了~
没有哪个书上写着声明在后面啊 自己看看
2011-04-07 01:45
jackboos
Rank: 2
等 级:论坛游民
帖 子:21
专家分:37
注 册:2011-4-6
收藏
得分:0 
http://wenku.baidu.com/view/e70c26225901020207409cca.html
编译器对于每个编译单元(源文件)顺序扫描源代码,如果之前遇到过声明,那么会根据声明的内容假定它的定义在当前源文件中或者在另外的源文件或库文件中,这样不会出现错误。否则就会当作未定义的标识符而产生编译错误。

[ 本帖最后由 jackboos 于 2011-4-7 09:09 编辑 ]
2011-04-07 01:46
kechujian
Rank: 1
等 级:新手上路
帖 子:22
专家分:5
注 册:2011-3-17
收藏
得分:0 
就是说所有的声明都必须是紧跟在{后面的,中间不能加入其他语句是吧?
2011-04-07 01:50
jackboos
Rank: 2
等 级:论坛游民
帖 子:21
专家分:37
注 册:2011-4-6
收藏
得分:10 
回复 8楼 kechujian
正解!声明完了才能跟其他语句 否则编译器不认识这些变量
睡觉去了~加油!
2011-04-07 01:54
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
楼主用的什么编译器,看来够老的。

新一点的编译器都允许随时声明变量,C99 增加了这个特性(一般认为是 C99 中增加的最有用的特性之一)。

另外声明只要位于一个块的最开始就行了,比如可以这样:
int f()
{
    int a;
    int b;
    /* ... */
    for (..;..;..) {
        int c;
        /* ... */
    }

    return a;
}
其中 c 的声明就是可以的。但它的作用域就只有 for 那么一块。
2011-04-07 09:02
快速回复:关于malloc问题
数据加载中...
 
   



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

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