我没啥想法,也不是高手,总结一下"变长数组"
c语言吧
全部回复
仅看楼主
level 7
斑竹觉得实在太杂碎可以删~介绍一下两个函数,malloc和reallocmalloc用法:n=(类型 *)malloc(长度);下面不要把这个想成内存,要想成一个数组!int *n; (n是一个整型数组的名字!)n=(int *)malloc(sizeof(int)*5); 这里的sizeof(int)如果你是刚入门就不用懂什么意思,只要记住写变量的类型就可以了.如果你是中鸟..想必应该明白意思,我不多说. 后面乘的5就是数组长度也就是说n=(int *)malloc(sizeof(int)*5);与 int n[5];作用基本相同,这个时候数组已经出来了.第二个函数realloc(名字,长度);例子:假如说我刚才的5个数不咋够用,需要10个才够用那么n=realloc(n,10); 这个时候n[0],n[1]...n[4]的值不变!后面多增加出来n[5],n[6],n[7]..n[9],可以用来继续记录,如果觉得不够还可以加长!只要你的机子不崩溃.经过本人做很多很多好题烂题发现,这个不仅可以用来做字符串的输入,一些不定长度的操作,甚至一些简单的链表问题也可以用变长数组来解决.当然一样东西有一样东西的用途,不是说这个就可以完全代替链表..嘿嘿.
2007年10月14日 10点10分 1
level 0
呃,据我所知,realloc效率不高呀。一般可以考虑用“链块”~
2007年10月14日 10点10分 2
level 7
链块?具体..
2007年10月14日 10点10分 3
level 8
realloc不仅是效率不高的问题了.
2007年10月14日 10点10分 5
level 8
数组在栈, malloc在堆, VLA不知是栈是堆, 应该是堆.
2007年10月14日 10点10分 6
level 6
当数组原容量超过剩余空间的时候……
2007年10月14日 10点10分 7
level 7
当数组原容量超过剩余空间的时候 怎样

?
2007年10月14日 10点10分 8
level 7
VLA在堆就好..(刚才去补习堆栈..)
2007年10月14日 11点10分 9
level 7
MSDN上面说内存空间不够的时候就不会扩展原来的内存空间的大小,这话固然没有错,但是有点含糊,似乎遗漏了一种情况!我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;可如果数据后面的字节不够的话,问题就出来了,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上。这句话传递的一个重要的信息就是数据可能被移动!呃..这段话..我明白了..
2007年10月14日 11点10分 11
level 0
关键是,数据移动后,原来的堆内存释放了吗?有or not有,is a problem......realloc对这个的具体实现,ANSI是否已经作出规定?广告之后,请继续关注,一个老鼠引发的问题~
2007年10月14日 12点10分 12
level 7
老大 他插我拿广告插我帖子
2007年10月14日 12点10分 13
level 7
realloc出错的时候堆内存虽然释放了但是由于没有其它写入操作还是可应用的这就是为什么从没有出现过realloc致命漏洞的原因!哦也一口气说完了~
2007年10月14日 12点10分 14
level 6
寒Ls的……
2007年10月14日 12点10分 15
level 7
寒啥捏
2007年10月14日 12点10分 16
level 6
15楼寒的是13楼
2007年10月14日 13点10分 17
level 1
路过...
2007年10月14日 13点10分 18
1