gpt4 book ai didi

c - 何时返回指针、将指针作为参数传递或根本不使用它们?

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

我目前正在试验 C,我很难理解如何在函数中使用指针。我理解当我初始化一个指针然后取消引用它时发生了什么,但是,当我必须在函数中使用它们时,我有点困惑,如下所示:

我这里有三个函数,但我不知 Prop 体什么时候用哪个。我对 C 还是比较陌生。

int returnSomething(int a, int b)
int returnSomething(int *ptrA, int *ptrB)
int* returnSomething(int *ptrA, int *ptrB);

编辑:

这三者有很大区别吗?

最佳答案

您需要根据各种情况调整您的用法。

第一种情况,你按值取两个整数作为参数并返回一个整数。因为您的参数是按值传递的,所以对它们应用的任何更改都将只具有函数范围。

例如:

int returnSomething(int a, int b)
{
a = 0;
b = 0;
return 0;
}

//....

int x = 3;
int y = 4;
returnSomething(a,b);
// x will still be 3, y will still be 4

在第二种情况下,因为您将参数作为指针传递,所以您将能够更改值。

int returnSomething(int* a, int* b)
{
*a = 0;
*b = 0;
return 0;
}

//....

int x = 3;
int y = 4;
returnSomething(&a,&b);
// x and y will be 0 here

第三种情况,除了通过指针传递参数外,您还返回一个指向 int 的指针。这意味着在函数内部你必须分配内存并在完成后释放它。我不建议使用它,通常有解决方法。

int* returnSomething(int* a, int* b)
{
int* x = malloc(sizeof(int));
*x = 1;
return x;
}

//....

int x = 3;
int y = 4;
int* z = returnSomething(&a,&b);
free(z);

答案是,这取决于你想做什么。如果您需要更改方法中的参数值,请通过引用或指针传递。我不建议使用最后一种方法。

此外,这适用,因为您正在处理 POD 类型。如果您有自己的结构,通过指针传递它或返回指针会更有效,因为不必创建新副本。

关于c - 何时返回指针、将指针作为参数传递或根本不使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7564757/

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