荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: huhaiming (一生只爱她), 信区: Program
标 题: 更正!!!关于编程文化(四)的讨论
发信站: 荔园晨风BBS站 (Sat May 10 13:49:28 2003), 站内信件
首先向cycker say sorry了
由于我是文中所说的cheap仔,new hand
对于你提问的我想当然的以为是多此一举了
但其实。。。。你的是对的。
对于在函数中要malloc,需要写成:
void GetVersion(char **pStr)
{
*pStr = (char*)malloc(10);
strcpy( *pStr, "2.2");
}
void main()
{
char* ver = NULL;
GetVersion (&ver);
if(ver==NULL)
printf("!!!!!!!!\n");
else
printf("%s\n", ver);
free (ver);
}
的确是要加& 引用,才可以真实地申请到空间并字符串拷贝
至于为什么,因为加了引用才是真正的传址。
而在前文中提到的:
void GetVersion(char* pStr)
{
pStr = (char*)malloc(10);
int len=strlen(pStr);
strcpy ( pStr, "2.0" );
}
void main()
{
char* ver = NULL;
GetVersion ( ver );
if(ver!=NULL)
printf("%s\n",ver);
else
printf("malloc not succ\n");
free ( ver );
}
如果胆敢不加引用,只是传ver过去,看起来的确像是传了地址过去
但其实,这还是一种传值,而不是真正的传址。只是,传过去的是
指针值而已。(我猜测,认为)因此,在malloc的时候,肯定不会
改变ver的实际内容的。
而我在测试过程中,也不知道可以怎么操作分函数里面的指针。。
如果不malloc的话。
如果用数组操作的话,这样的问题是不会有的。(经过测试)
而文中要提醒的,应该是不要以为传指针过去就以为是地址值。
这是不对的,应该加引用。因为传指针的时候,其实还是传值的一种。
btw:cycker你写的函数,malloc一定要转换类型才能赋值,这要小心
要写成 pStr = (char*)malloc(10);
--
菩提本无树,明镜亦非台
本来无一物,何处惹尘埃
※ 修改:·huhaiming 於 May 10 13:58:28 修改本文·[FROM: 192.168.0.200]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.200]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店