我总是看到两种函数,如下所示:
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_1
和function_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;
在指针
*
中是获取变量中地址内容的方式(在这种情况下为变量==指针),因此当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 - C,两种功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24248491/