标题:怎样才能定义一个动态的数组?
只看楼主
hyb472221439
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2011-10-4
得分:0 
回复 3楼 hyb472221439
这个应该在哪里创建?为什么C++里创建出现一个1 error(s)

--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
C:\Documents and Settings\Administrator\Cpp1.cpp(59) : error C2374: 'i' : redefinition; multiple initialization
        C:\Documents and Settings\Administrator\Cpp1.cpp(56) : see declaration of 'i'
C:\Documents and Settings\Administrator\Cpp1.cpp(62) : warning C4508: 'main' : function should return a value; 'void' return type assumed
执行 cl.exe 时出错.
2011-10-05 01:12
phoenzoin
Rank: 1
等 级:新手上路
帖 子:6
专家分:3
注 册:2011-8-13
得分:3 
你该不会是直接把楼上那个程序在你的编程环境下运行了吧。。。他那个应该是在VS10上写的,如果不是这个版本,main函数前应该是加void的,VS10就是加int了。。
2011-10-05 11:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
回复 11楼 hyb472221439
main 里面用了两次 i j,第二次 i j 你随便换两个字母就行。
2011-10-05 19:33
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

static int *pArray;         // 指向一个任意维数的数组
static int *pDimensions;    // 所有维数
static int Dimension;       // 维数

// 初始化数组
int *initArray(int dimension, ...)
{
    int i, j = 1;
    Dimension = dimension;
    pDimensions = malloc(sizeof(int) * dimension);
    for (i = 1; i <= dimension; i++) {
        pDimensions[i - 1] = (&dimension)[i];
        j *= (&dimension)[i];
    }
    pArray = malloc(sizeof(int) * j);
}

// 根据索引获得值
int get(int dimension, ...)
{
    int i, j, k, offset = (&dimension)[dimension];
    for (i = 1; i < dimension; i++) {
        k = 1;
        for (j = 1; j <= i; j++)
            k *= pDimensions[dimension - j];
        offset += k * (&dimension)[dimension - i];
    }
    return pArray[offset];
}

// 根据索引设置值
void set(int value, ...)
{
    int i, j, k, offset = (&value)[Dimension];
    for (i = 1; i < Dimension; i++) {
        k = 1;
        for (j = 1; j <= i; j++)
            k *= pDimensions[Dimension - j];
        offset += k * (&value)[Dimension - i];
    }
    pArray[offset] = value;
}

// 释放内存
void destroy()
{
    free(pArray);
    free(pDimensions);
}

int main(void)
{
/*
    initArray(2, 3, 4) -> int[3][4]
    initArray(1, 5) -> int[5]
    initArray(3, 3, 3, 3) -> int[3][3][3]
    ...
*/
    initArray(3, 3, 3, 3);  // 三维数组
    int a[3][3][3];
    int i, j, k, count = 1;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
            for (k = 0; k < 3; k++) {
                set(count, i, j, k);
                a[i][j][k] = count++;
            }
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
            for (k = 0; k < 3; k++)
                printf("a[%d][%d][%d]: %d\nget(%d, %d, %d, %d): %d\n", i, j, k, a[i][j][k], 3, i, j, k, get(3, i, j, k));
    destroy();
}

/*
a[0][0][0]: 1
get(3, 0, 0, 0): 1
a[0][0][1]: 2
get(3, 0, 0, 1): 2
a[0][0][2]: 3
get(3, 0, 0, 2): 3
a[0][1][0]: 4
get(3, 0, 1, 0): 4
a[0][1][1]: 5
get(3, 0, 1, 1): 5
a[0][1][2]: 6
get(3, 0, 1, 2): 6
a[0][2][0]: 7
get(3, 0, 2, 0): 7
a[0][2][1]: 8
get(3, 0, 2, 1): 8
a[0][2][2]: 9
get(3, 0, 2, 2): 9
a[1][0][0]: 10
get(3, 1, 0, 0): 10
a[1][0][1]: 11
get(3, 1, 0, 1): 11
a[1][0][2]: 12
get(3, 1, 0, 2): 12
a[1][1][0]: 13
get(3, 1, 1, 0): 13
a[1][1][1]: 14
get(3, 1, 1, 1): 14
a[1][1][2]: 15
get(3, 1, 1, 2): 15
a[1][2][0]: 16
get(3, 1, 2, 0): 16
a[1][2][1]: 17
get(3, 1, 2, 1): 17
a[1][2][2]: 18
get(3, 1, 2, 2): 18
a[2][0][0]: 19
get(3, 2, 0, 0): 19
a[2][0][1]: 20
get(3, 2, 0, 1): 20
a[2][0][2]: 21
get(3, 2, 0, 2): 21
a[2][1][0]: 22
get(3, 2, 1, 0): 22
a[2][1][1]: 23
get(3, 2, 1, 1): 23
a[2][1][2]: 24
get(3, 2, 1, 2): 24
a[2][2][0]: 25
get(3, 2, 2, 0): 25
a[2][2][1]: 26
get(3, 2, 2, 1): 26
a[2][2][2]: 27
get(3, 2, 2, 2): 27

Process returned 1 (0x1)   execution time : 0.359 s
Press any key to continue.
*/


[ 本帖最后由 lz1091914999 于 2011-10-5 21:55 编辑 ]

My life is brilliant
2011-10-05 21:53
guilin0822
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:21
专家分:20
注 册:2011-7-28
得分:3 
     在c里面好像没有动态数组,如:数组a[n]其中n为变量,这种型形是禁止的。因为c在初始化时,必须对每个数组分配空间,当然如果n是变量则不能分配空间。这是C的特点。
     不过,动态数组还是可以间接做到的。
     比如定义一个足够大的数组a[m],m=1000,或更大(也就是足够大)。在程序中,可以再定义一个int变量n(n<=m),用它来控制你要取数组a[m]中的前几个元素(因为,现在不是定义数组,所以,这个n可以是变量。)。其中,在每次用完后,要记得把数组中各无素的值赋成0.为防止在后面程序中调用时出错。
2011-10-06 01:02
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
得分:3 
动态数组的形式就是指针;指向某个东西~ 但是你不知道其大小!也不可能知道除非你做一个遍历! C 也可以模拟动态数组的实现! 为什么vector 可以知道其大小那是因为 vector里面存储了一个整形值 所以能提取出大小!

君生我未生 我生君以老
2011-10-06 16:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-351583-1-1.html




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

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