gpt4 book ai didi

C - 指针的正确语法

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:18 25 4
gpt4 key购买 nike

我调用一个函数全局变量如下:

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) 时它才有效。有人可以告诉我这是否正确吗?我仍然不明白为什么它不需要 (Destination)。

最佳答案

是的,Destination已经声明为一个指针,所以你在DoSomething(&Destination)中传递了Destination的地址,即就像一个指向指针的指针,那么您需要在 DoSomething() 函数中取消引用 Destination,间接运算符 * 对此起作用。

但是正确的做法,不是传递指针的地址,而是传递指针,就像在

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;
}

如果执行前面的程序,会发现指针都指向同一 block 内存,内存中的内容也是一样的,所以在main()中调用free 将释放内存。

关于C - 指针的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27868775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com