pizg 发表于 2012-12-7 08:43:47

數個Array問題?

本帖最后由 pizg 于 2012-12-7 10:03 编辑

請教各位前輩:

1. 如果陣列元素並非單一性質,

例如a[] = { "A1028235343", "apple" , "60-3-7", 165.3};

該如何宣告?


2. 該如何知道Array的元素數量?


3. 如果已先宣告並給值, 如下

int a[]={0,1,2};

該如何動態新增一個Array元素?


4.假設

int a1[]={0,1,2};
int a2[]={0,1,2,3};

該如何把a2的值複製給a1?

histamine 发表于 2012-12-7 09:47:11

int a[]={0,1,2};
是分配在栈或者数据段上的,并且由编译器计算int a[]占用的空间大小,无法动态增加新的元素

对于编译期间已确定长度的数组,要知道数组元素数量的话: sizeof(a) / sizeof(a)

pizg 发表于 2012-12-7 10:02:35

本帖最后由 pizg 于 2012-12-7 10:13 编辑

histamine 发表于 2012-12-7 09:47 http://www.geek-workshop.com/static/image/common/back.gif
int a[]={0,1,2};
是分配在栈或者数据段上的,并且由编译器计算int a[]占用的空间大小,无法动态增加新的元 ...

感謝你的回覆.

針對動態增加新元素, 我的解決辦法如下:

int a1[]={0,1,2};
   
int n = sizeof(a1) / sizeof(int);
int a2;
for (int j=0; j<n;j++) {
a2=a1;
}
a2 = 3;

此時 a2[] = {0,1,2,3},
接下來我就不會了,
該如何把a2的元素全數丟給a1?


我的貼文剛剛又有作少許的修改,
你是否也可以幫忙解答另幾項問題?
感謝.

histamine 发表于 2012-12-7 10:24:18

最简单的方法实现事先声明一个比较大的数组,比如int a,然后用一个变量记录已经存放了多少个元素,不过数组中存放元素的总数量不能超过这个数组的长度

或者使用C语言malloc/realloc/free等内存动态管理函数

或者学习C++的std::vector
arduino可用https://github.com/maniacbug/StandardCplusplus这个库中的vector

histamine 发表于 2012-12-7 10:59:30

本帖最后由 histamine 于 2012-12-7 11:09 编辑

1. 如果陣列元素並非單一性質,

例如a[] = { "A1028235343", "apple" , "60-3-7", 165.3};

該如何宣告?

=>#include <stdio.h>

typedef enum _TYPE_ID {
        TYPE_ID_STRING,
        TYPE_ID_DOUBLE,
        TYPE_ID_INTEGER
} TYPE_ID;

typedef struct _ANY_TYPE {
        TYPE_ID id;
        union {
           char *v_string;
           double v_double;
         intv_int;
        } value;
} ANY_TYPE;

ANY_TYPE a[] =
{
        { TYPE_ID_STRING,{ v_string : "A1028235343" } },
        { TYPE_ID_STRING,{ v_string : "apple"       } },
        { TYPE_ID_STRING,{ v_string : "60-3-7"      } },
        { TYPE_ID_DOUBLE,{ v_double : 165.3         } },
        { TYPE_ID_INTEGER, { v_int    : 123         } }
};

int main ( void )
{
        int i;
        for ( i = 0; i < sizeof( a ) / sizeof( *a ); i++ )
        {
                switch( a.id )
                {
                case TYPE_ID_STRING:
                        printf( "Type = string, Value = %s\n", a.value.v_string );
                        break;
                case TYPE_ID_DOUBLE:
                        printf( "Type = double, Value = %f\n", a.value.v_double );
                        break;
                case TYPE_ID_INTEGER:
                        printf( "Type = int, Value = %d\n", a.value.v_int );
                        break;
                default:
                        printf( "Unknown Type!\n" );
                        break;
                }
        };
        return 0;
}

pizg 发表于 2012-12-7 17:26:51

histamine 发表于 2012-12-7 10:59 static/image/common/back.gif
1. 如果陣列元素並非單一性質,

例如a[] = { "A1028235343", "apple" , "60-3-7", 165.3};


感謝指點:).

jack4904 发表于 2012-12-17 20:07:41

C語言中有個對付不同資料型態的東西叫做struct
可以這樣寫:
struct abc{ //定義abcstruct
int a;
char b[];
};//<這個分號不能少
struct aa;
页: [1]
查看完整版本: 數個Array問題?