我知道,C++中有了容器,可以很方面的向容器中增加新值。
传统的C,只能这样做:
char *A=new char[5];
A="ABCD";
//在此后我想在A后面加入"EFG"
char *B=new char[8];//用一个临时的新长度B
strcpy(B,A);//复制旧地址空间的值到新地址空间
delet []A;//回收旧地址空间
strcat(B,"EFG");//在新地址空间未尾加入新值
A=B;//使A指向新的地址空间delete []A;//用完后回收指针A指向的地址空间。我也知道,容器的内部实现机理也是类似这样的。
但这样一个问题是,我仅仅是数个char还不会有太大的开销,
但如果是很多个很复杂的struct的话,问题就很严重了,
尤其是在嵌入式系统中,问题更加严重。因为这需要旧长度的一倍内存用于交换。
所以我想:
如上例中,在想访问最后一个元素后,在需要时节可否直接:
&A[5]=new char[3];
&A[5]="EFG";
即直接跳向新分的地址。即表现起来似乎是链表。
当然这样的写法,现在的C和C++是无法通过编译的,
因为这样如果可以的话,将使A不再是连续的地址空间。
有没有什么方法可以实现链表功能,请各路大侠指教!!!!

解决方案 »

  1.   

    还要那么麻烦,用CArray和CStringArray很方便的就搞定了。
      

  2.   

    syy64(太平洋) 
    我不仅在PC上编程,我还要做嵌入式的,连new和delete都没有,只有malloc和free。
    还有什么CArray和CStringArray!!!!!!!
      

  3.   

    连new和delete都没有,只有malloc和free。
    ++++++++++++++这种语言我们叫C,C++的话就有new和delete了。char *A=new char[5];
    A="ABCD";这是错误的用法,仔细想想。另外,C中有个realloc的,当然也可以用别的方法(就是结构)实现链表之类的数据结构,这些在普通的数据结构书上都有,就是用指针的。
      

  4.   

    char *A=new char[5];
    A="ABCD";看到这种代码就知道搂住的c语言水平还未入门提出这么奇怪的问题也就不奇怪了恩,我是说的尖刻了一点
      

  5.   

    Sorry,
    我也不知怎回,总是不小心写成这样。
    我知道对char*得用strcpy
      

  6.   

    可以封装一个结构,用链表和数组结合的方式来做
    比如,分配定长的数组,比如长度是100的
    当需要的长度不足,100的时候,直接用它
    当需要的长度超过100的时候,比如150个
    那么再分配100个长度,把101-150之间的数据放在这里
    把新的数组和老的数组的头指针,用一个链表结构来管理
    假如你需要访问第305个元素,那么就先从链表当中找到第三个数组的开始位置,然后找其中的第五个元素就是了这样就无需频繁的malloc,free或者realloc的调用