我总是看到以下两种功能:
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
之间有什么区别?他们的用例是什么?
答案 0 :(得分: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个整数的简单数组,并且可以使用方括号[]
作为{ {1}}。
retNb[i]
指针*buff = retNb;
中的是获取变量中地址内容的方法(在本例中为variable == pointer),因此当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
(4)的值,第二次打印是myPointer
的值,其值为myPointerToPointer
,其值为4:P
第三和第四个输出是相同的两个,因为myPointer
的地址实际上是myPointer
指向的位置。
关于第二个功能:
myPointerToPointer
它获取一个int指针 - 不是指向指针的指针 - 只是一个指针 - 意味着它包含一个可以使用opeartor void Function_2(int* retNb)
访问的整数变量的地址。
*
这一行是分配动态内存(再次是retNb = (int*) malloc(42 * sizeof(int));
的42倍),现在可以被视为具有42个点的常规int数组 - 但这是它唯一做的事情,它没有任何指向它的东西,只需分配内存即可。
希望你明白:P
答案 1 :(得分:0)
在函数二中,你有一个指向42个int数组的指针。 int function 1你设置buff指向这个数组。