gpt4 book ai didi

C、两种函数

转载 作者:行者123 更新时间:2023-11-30 20:56:31 25 4
gpt4 key购买 nike

我总是看到如下两种函数:

void Function_1(
int** buff
)
{
int* retNb = null;
retNb = (int*) malloc(42 * sizeof(int));
*buff = retNb;
}

void Function_2(
int* retNb
)
{
retNb = (int*) malloc(42 * sizeof(int));
}

function_1function_2 之间有什么区别?他们的用例是什么?

最佳答案

这是一个非常大的区别,它们确实不同 - 无论从哪方面来说。让我们保持简单:

 void Function_1(int** buff)

函数 1 中的参数是一个指向名为 buff 的 int 的指针,该函数的作用如下:

int* retNb = null;

声明一个名为 retNb 的 int 指针,但这里对 NULL 的赋值确实没有必要,因为下一行如下:

retNb = (int*) malloc(42 * sizeof(int));
调用

retNb 来获取从 malloc 返回的值。 malloc 在内存中分配了 42*sizeof(int) 位置并将其返回给 retNb,现在它可以被视为具有 42 个整数的简单数组并且可以通过方括号[]访问为retNb[i]

*buff = retNb;

in 指针 * 是获取变量中地址内容的方法(本例中变量==指针),因此当使用 *buff 时 buff是 **buff (指向指针的指针),您实际上是在请求 buff 指向的指针。假设我们有代码:

int** myPointerToPointer = NULL;
int* myPointer = malloc(sizeof(int));
*myPointer = 4; //or myPointer[0] = 4;
printf("%d\n", *myPointer);
myPointerToPointer = &myPointer;
printf("%d\n", *(*myPointerToPointer));
printf("%d\n", &myPointer);
printf("%d\n", *myPointerToPointer);

那么输出将是:

4
4
SOME_ADDRESS
SAME_ADDRESS

因为第一次打印的是myPointer的值(4),第二次打印的是myPointerToPointer的值,其值为myPointer > 其值为 4 :P第三个和第四个输出是相同的两个,因为 myPointer 的地址实际上是 myPointerToPointer 指向的位置。

关于第二个函数:

void Function_2(int* retNb)

它获取一个 int 指针 - 不是指向指针的指针 - 只是一个指针 - 意味着它包含可以使用操作器 * 访问的整数变量的地址。

retNb = (int*) malloc(42 * sizeof(int));

这一行正在分配动态内存(同样是 42 倍 sizeof(int)),现在可以被视为具有 42 个点的常规 int 数组 - 但这是它唯一做的事情,它不会'没有任何指向它的东西,只需分配内存即可。

希望你能理解:P

关于C、两种函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24248491/

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