极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10869|回复: 6

數個Array問題?

[复制链接]
发表于 2012-12-7 08:43:47 | 显示全部楼层 |阅读模式
本帖最后由 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?
回复

使用道具 举报

发表于 2012-12-7 09:47:11 | 显示全部楼层
int a[]={0,1,2};
是分配在栈或者数据段上的,并且由编译器计算int a[]占用的空间大小,无法动态增加新的元素

对于编译期间已确定长度的数组,要知道数组元素数量的话: sizeof(a) / sizeof(a[0])
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-7 10:02:35 | 显示全部楼层
本帖最后由 pizg 于 2012-12-7 10:13 编辑
histamine 发表于 2012-12-7 09:47
int a[]={0,1,2};
是分配在栈或者数据段上的,并且由编译器计算int a[]占用的空间大小,无法动态增加新的元 ...


感謝你的回覆.

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

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

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-12-7 10:24:18 | 显示全部楼层
最简单的方法实现事先声明一个比较大的数组,比如int a[128],然后用一个变量记录已经存放了多少个元素,不过数组中存放元素的总数量不能超过这个数组的长度

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

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

使用道具 举报

发表于 2012-12-7 10:59:30 | 显示全部楼层
本帖最后由 histamine 于 2012-12-7 11:09 编辑

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

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

該如何宣告?

=>
  1. #include <stdio.h>

  2. typedef enum _TYPE_ID {
  3.         TYPE_ID_STRING,
  4.         TYPE_ID_DOUBLE,
  5.         TYPE_ID_INTEGER
  6. } TYPE_ID;

  7. typedef struct _ANY_TYPE {
  8.         TYPE_ID id;
  9.         union {
  10.            char *v_string;
  11.            double v_double;
  12.            int  v_int;
  13.         } value;
  14. } ANY_TYPE;

  15. ANY_TYPE a[] =
  16. {
  17.         { TYPE_ID_STRING,  { v_string : "A1028235343" } },
  18.         { TYPE_ID_STRING,  { v_string : "apple"       } },
  19.         { TYPE_ID_STRING,  { v_string : "60-3-7"      } },
  20.         { TYPE_ID_DOUBLE,  { v_double : 165.3         } },
  21.         { TYPE_ID_INTEGER, { v_int    : 123           } }
  22. };

  23. int main ( void )
  24. {
  25.         int i;
  26.         for ( i = 0; i < sizeof( a ) / sizeof( *a ); i++ )
  27.         {
  28.                 switch( a[i].id )
  29.                 {
  30.                 case TYPE_ID_STRING:
  31.                         printf( "Type = string, Value = %s\n", a[i].value.v_string );
  32.                         break;
  33.                 case TYPE_ID_DOUBLE:
  34.                         printf( "Type = double, Value = %f\n", a[i].value.v_double );
  35.                         break;
  36.                 case TYPE_ID_INTEGER:
  37.                         printf( "Type = int, Value = %d\n", a[i].value.v_int );
  38.                         break;
  39.                 default:
  40.                         printf( "Unknown Type!\n" );
  41.                         break;
  42.                 }
  43.         };
  44.         return 0;
  45. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-7 17:26:51 | 显示全部楼层
histamine 发表于 2012-12-7 10:59
1. 如果陣列元素並非單一性質,

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

感謝指點.
回复 支持 反对

使用道具 举报

发表于 2012-12-17 20:07:41 | 显示全部楼层
C語言中有個對付不同資料型態的東西叫做struct
可以這樣寫:
struct abc{ //定義abc  struct
int a;
char b[];
};  //<這個分號不能少
struct aa[2];
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-1 13:01 , Processed in 0.049810 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表