新手求教 关于传递指针的 问题
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
上面这个例子是错的 因为函数参数都是局部变量,改变这些参数的值不会影响调用函数中的值。
参数应该写为 char**p传递 指针的指针 去改变指针的值 (引用传递)
但是 我有个疑问 数组(int i[]) 在函数间传递 应该是 引用传递吧 因为 数组 命本身就是 指针
这就是问题??? 为什么同样 都是指针 但是 数组 作为参数 传递 是引用传递可以直接 改变它里面元素的值 但是 char* 却要 写成char**才能 作为引用传递?
[解决办法]
不管形参是char[] 还是char* 都是传递指针 不是引用
所以不管形参是char[] 还是char* 都能通过 i[]修改数组的内容 而且不能通过 i=修改指针的指向
说得应该很明白 希望你看得懂
[解决办法]
因为指针传递过程中,实参向形参传递的是副本,那么在被调用函数结束后该指针会被释放,不会将在被调用函数里获得在堆上申请的空间首地址。所以,形参还是形参,实参还是形参。
如果传二重指针,那么就会解决这么问题,因为传过去的是指针的地址,通过*p = (char *)malloc(100);修改的是实参的指针指向,所以能够获得有效空间。