我将函数global var调用如下:
char *Pointer;
然后我把它传递给函数:
char *MyChar = DoSomething (&Pointer);
定义为:
char *DoSomething (char *Destination)
{
free (*Destination);
//re-allocate memory
Destination = malloc (some number);
//then do something...
//finally
return Destination;
}
只有在我使用(* Destination)而不是(Destination)时它才有效。谁能告诉我这是否正确?我仍然不明白为什么不采取(目的地)。
答案 0 :(得分:2)
这是正确的,Destination
已经被声明为指针,所以你在Destination
中传递DoSomething(&Destination)
的地址,就像指向指针一样,那么你需要取消引用Destination
函数内的DoSomething()
,间接运算符*
可以为其工作。
但是正确的方法,不是传递指针的地址,而是指针,而不是像
DoSomething(Destination);
现在,因为你想在函数内部使用malloc Destination
,你应该这样做
char * DoSomething( char **Destination )
{
// free( Destination ); why?
//re-allocate memory
*Destination = malloc( some number );
//then do something...
//finally
return *Destination;
}
这是演示如何使用指针
的演示#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *copyString(const char *const source)
{
char *result;
int length;
length = strlen(source);
result = malloc(length + 1);
if (result == NULL)
return NULL;
strcpy(result, source);
printf("The address of result is : %p\n", result);
printf("The content of result is : %s\n", result);
printf("The first character of result is @ %p\n", &result[0]);
return result;
}
int main()
{
char *string = copyString("This is an example");
printf("\n");
printf("The address of string is : %p\n", string);
printf("The content of string is : %s\n", string);
printf("The first character of string is @ %p\n", &string[0]);
/* we used string for the previous demonstration, now we can free it */
free(string);
return 0;
}
如果你执行上一个程序,你会发现指针都指向同一个内存,并且内存的内容是相同的,所以在free
中调用main()
将释放内存
答案 1 :(得分:2)
这是一种正确的方法
char *Pointer;
//,,, maybe allocating memory and assigning its address to Pointer
//... though it is not necessary because it is a global variable and
//... will be initialized by zero. So you may apply function free to the pointer.
char *MyChar = DoSomething( Pointer );
char * DoSomething( char *Destination )
{
free( Destination );
//re-allocate memory
Destination = malloc( some number );
//then do something...
//finally
return Destination;
}
至于你的代码那么
参数的类型与函数调用
中的参数类型不对应char * MyChar = DoSomething(&amp; Pointer);
参数的类型是char *
(char * Destination),而参数的类型是
char **
(&amp;指针)
由于Destination是一个指针,而不是
免费(*目的地);
你必须写
free( Destination );
答案 2 :(得分:0)
这是因为你传递了一个指针char *Pointer
的地址和
char *MyChar = DoSomething (&Pointer);
由于您在函数DoSomething
中传入指针的地址,因此它将功能范围变量Destination
视为指向地址的指针,该地址是指针Pointer
的地址
所以而不是传递Pointer
的地址
char *MyChar = DoSomething(&Pointer);
你需要传递指针本身:
char *MyChar = DoSomething(Pointer);
允许您使用
free(Destination);
注意缺少&
表示Pointer
的地址。