我知道,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不再是连续的地址空间。
有没有什么方法可以实现链表功能,请各路大侠指教!!!!
我不仅在PC上编程,我还要做嵌入式的,连new和delete都没有,只有malloc和free。
还有什么CArray和CStringArray!!!!!!!
++++++++++++++这种语言我们叫C,C++的话就有new和delete了。char *A=new char[5];
A="ABCD";这是错误的用法,仔细想想。另外,C中有个realloc的,当然也可以用别的方法(就是结构)实现链表之类的数据结构,这些在普通的数据结构书上都有,就是用指针的。
A="ABCD";看到这种代码就知道搂住的c语言水平还未入门提出这么奇怪的问题也就不奇怪了恩,我是说的尖刻了一点
我也不知怎回,总是不小心写成这样。
我知道对char*得用strcpy
比如,分配定长的数组,比如长度是100的
当需要的长度不足,100的时候,直接用它
当需要的长度超过100的时候,比如150个
那么再分配100个长度,把101-150之间的数据放在这里
把新的数组和老的数组的头指针,用一个链表结构来管理
假如你需要访问第305个元素,那么就先从链表当中找到第三个数组的开始位置,然后找其中的第五个元素就是了这样就无需频繁的malloc,free或者realloc的调用