C,两种功能

时间:2014-06-16 16:46:39

标签: c pointers function-pointers

我总是看到以下两种功能:

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之间有什么区别?他们的用例是什么?

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指向这个数组。