注册 登录
编程论坛 C++教室

各位大神进来帮我解释下这个C++语句

hanzuxiang 发布于 2012-04-24 22:53, 387 次点击
具体代码如下:
int HStrConcat(HString&T,HStringS1,HStringS2)
int i;
if(!(T.ch=(char*)malloc((S1.length+S2.length)*sizeof(char))))

跪求各位帮忙解释下意义,谢谢咯!
4 回复
#2
hanzuxiang2012-04-24 22:58
没人帮我么?
#3
寒风中的细雨2012-04-25 10:42
这那得代码,  怎么替你分析, 太突然了
#4
a998759842012-04-25 19:15
把全部的发出来吧,不然真没几个人能看懂
#5
天使梦魔2012-04-26 12:01
void *malloc(size_t size);   
说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针


等价描述:
T.ch=(char*)malloc((S1.length+S2.length)*sizeof(char))
if(!T.ch){..........}


T.ch=(char*)malloc((S1.length+S2.length)*sizeof(char)))
把后面的给T的ch成员


(char*)malloc
把malloc函数的返回值强行转换成char指针.比如cout<<(int)'a';强制转换a为数字,就是ascii编码

(S1.length+S2.length)     *     sizeof(char)
cout<<sizeof(char);就知道是多少.前面是s1和s2的length成员相加然后再乘以char的大小.



总结:
将S1和S2的成员相加并得到两者字符长度,然后转换成字符指针给予T的ch成员
条件检测ch成员是否得到具有长度的地址,ch在初始化前肯定是NULL也就是0,这样才能用!ch来判断两个成员是否有实际意义.
ch的作用是开辟一个S1,S2的length成员两者相加后这种大小的空间,length可能不是字符串也许是记录某个地方大小,因为后面乘以char占用内存大小数字.如果是字符串可以直接sizeof(S2.length)而直接得到成员占用大小.

[ 本帖最后由 天使梦魔 于 2012-4-26 12:12 编辑 ]
1