| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 906 人关注过本帖
标题:数组,动态数组
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
想想C能不能随时变化字符串的长度就知道了

授人以渔,不授人以鱼。
2013-04-01 17:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C/C++的字符串就是字符数组,一经创建,其空间就不能改变,如果要改变空间尺寸,则需要另外找内存把原来的数据复制过去,这是C/C++数组的基本特征,即使是C#的字符串string,也是这样的(C#中的string,对内存作任何改变,实际上都是重新创建的新字符串)。你可以申请预留较大的数组空间,但绝不可以临时增减这个空间的容量了。即使用动态申请内存malloc()建立数组,也同样是不能改变这块内存的大小,有人以为realloc()可以改变这块内存的大小,是极大的误区,这个函数实际上操作的是另外开辟一块内存然后把原来的数据复制过去,再把新内存的指针返回,这样,新指针和旧指针的值是不一样的,那样爱用指针的程序员就很容易死翘翘,因为它会以为那是同一块内存——这也是后来很多语言禁用指针的原因,新的C/C++语法都有自动跟踪地址变化的智能指针,不再是现在大家所看到的那样。

[ 本帖最后由 TonyDeng 于 2013-4-1 17:38 编辑 ]

授人以渔,不授人以鱼。
2013-04-01 17:30
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
以下是引用TonyDeng在2013-4-1 17:30:07的发言:

C/C++的字符串就是字符数组,一经创建,其空间就不能改变,如果要改变空间尺寸,则需要另外找内存把原来的数据复制过去,这是C/C++数组的基本特征,即使是C#的字符串string,也是这样的(C#中的string,对内存作任何改变,实际上都是重新创建的新字符串)。你可以申请预留较大的数组空间,但绝不可以临时增减这个空间的容量了。即使用动态申请内存malloc()建立数组,也同样是不能改变这块内存的大小,有人以为realloc()可以改变这块内存的大小,是极大的误区,这个函数实际上操作的是另外开辟一块内存然后把原来的数据复制过去,再把新内存的指针返回,这样,新指针和旧指针的值是不一样的,那样爱用指针的程序员就很容易死翘翘,因为它会以为那是同一块内存——这也是后来很多语言禁用指针的原因,新的C/C++语法都有自动跟踪地址变化的智能指针,不再是现在大家所看到的那样。
我顺带提一嘴
智能指针也不能解决所有的问题...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-01 19:42
快速回复:数组,动态数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026589 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved