| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1036 人关注过本帖
标题:问一下数组的一个貌似是很重要的问题!高手速来回答
只看楼主 加入收藏
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:2 
回复 10楼 唏嘘草
自己去 google 以下动态数组就好了
2011-06-08 18:05
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 11楼 voidx
哦,看看去
2011-06-08 18:17
Q214HW
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2011-6-7
收藏
得分:2 
用动态数组就行了
2011-06-08 18:24
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 13楼 Q214HW
怎么用啊
2011-06-08 18:26
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 13楼 Q214HW
 对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。
2011-06-08 18:30
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:2 
这个问题以前我也想过,看到有人问到。我突然想用递归写个程序。
方法有很多种,但归根结底就是:动态内存分配。

程序代码:
#include <stdio.h>
#include <stdlib.h>

static int g_len;

#define GET_ARRAY (get_array(0))
#define GET_N_INT(P) (((P)=get_array(0)) ? g_len : 0)
int* get_array(int n)
{
    static int *p;
    int a;
    if (scanf("%d", &a) == 1) {
        if (p = get_array(n+1))
            p[n] = a;
        return p;
    }
    return (g_len=n) ? (int*)malloc(n*sizeof(int)) : NULL;
}

int main(void)
{
    int i, n, *p;

    printf("\n读取您输入的整数,输入非整数停止输入。\n"
           "您可以#来停止输入: ");
    //p=GET_ARRAY;   // p=输入的整数的地址——使后面代码知道输入的整数在哪。
    //n=g_len;       // n=刚刚输入的整数的个数——再次调用GET_ARRAY将改变g_len的值。
    n=GET_N_INT(p);  // 实现上面2行功能

    printf("\n您共输入了%d个整数:\n", n);
    for (i=0; i<n; ++i)
        printf("  %d", p[i]);
    printf("\n");

    free(p);   // 要记得用完就释放。要养成这个习惯。

    system("pause");
    return 0;
}


[ 本帖最后由 cosdos 于 2011-6-8 19:06 编辑 ]

—>〉Sun〈<—
2011-06-08 18:42
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
路过............

[ 本帖最后由 cosdos 于 2011-6-8 19:17 编辑 ]

—>〉Sun〈<—
2011-06-08 18:47
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
最后一次修改,不改了
程序代码:
#include <stdlib.h>
static int g_len;

// 把数组首地址赋值给P,返回数组长度。
#define GET_INT_ARRAY(P) (((P)=get_array(0)) ? g_len : 0)
int* get_array(int n)
{
    static int *p;
    int a;
    if (scanf("%d", &a) == 1) {
        if (p = get_array(n+1))
            p[n] = a;
        return p;
    }
    return (g_len=n) ? (int*)malloc(n*sizeof(int)) : NULL;
}


......................

要记得用free()释放内存,养成好习惯



[ 本帖最后由 cosdos 于 2011-6-8 19:14 编辑 ]

—>〉Sun〈<—
2011-06-08 19:08
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:2 
程序代码:
#include <stdio.h>

int main(void) {
    int rows, cols;
    scanf("%d%d", &rows, &cols);
    int array[rows][cols];
    printf("Successfully created a variable-length array:\n");
    printf("rows : %d\n", rows);
    printf("columns : %d\n", cols);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册


支持C99就行了。

My life is brilliant
2011-06-08 19:12
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
路过........

[ 本帖最后由 cosdos 于 2011-6-8 19:16 编辑 ]

—>〉Sun〈<—
2011-06-08 19:15
快速回复:问一下数组的一个貌似是很重要的问题!高手速来回答
数据加载中...
 
   



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

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