以下是引用weishen2011在2012-11-23 11:30:57的发言:
呵呵,谢谢哥们提醒,话说哥们好像很严肃啊,不过还是想问下你,你说实参s的值传给了形参p,然后再运行getmemory函数,最终只给形参p分配了地址空间,而没给实参s分配地址空间,是这个意思吗?
呵呵,谢谢哥们提醒,话说哥们好像很严肃啊,不过还是想问下你,你说实参s的值传给了形参p,然后再运行getmemory函数,最终只给形参p分配了地址空间,而没给实参s分配地址空间,是这个意思吗?
既然回过一帖,你又再问,不妨给你解释一下:无论传的什么参数,都是值传递,函数中形参p的地址值是从实参s中复制过来的,这是两个不同的指针数据,你在函数中给p赋值,与s无关,除非你把p的值再赋给s。正确的做法是函数返回分配后的指针,即return p,在调用处,s=p或s=getmemory(100),无需使用更隐晦的二级指针,把简单问题复杂化——其实这个函数的如此用法是多余的,纯作示例无妨。这样分配内存的函数,切记在上级函数中释放内存!
关于指针和参数传递原理,我讲过不下两三次,翻翻论坛旧帖都有,明白那个传参的原理,就绝不会犯这种错误,光模仿别人的代码是没用的,问问题别人给你写出代码也是解决不了长久问题的。
授人以渔,不授人以鱼。