在传递指向函数的指针之前,我必须始终初始化它?

时间:2014-01-16 20:25:34

标签: c function null initialization malloc

在将main()中定义的指针传递给函数之前,我必须初始化它,或者我可以将它初始化为函数吗?还是一样吗?我可以使用NULL初始化它吗?

我已经编写了一些代码。没关系?

[1] int *example的初始化位于函数中。

#include <stdio.h>
#define DIM (10)

void function (int *);

int main ()
{
    int *example;

    function (example);

    /* other code */

    free(example);

    return 0;
}

void function (int *example)
{
    /* INITIALIZATION */
    example = malloc (DIM * sizeof(int));

    /* other code */

    return;
}

[2] int *example的初始化是主要的。

#include <stdio.h>
#define DIM (10)

void function (int *);

int main ()
{
    int *example;

    /* INITIALIZATION */    
    example = malloc (DIM * sizeof(int));

    function (example);

    /* other code */

    free(example);

    return 0;
}

void function (int *example)
{
    /* other code */

    return;
}

[3] 初始化位于main() NULL

#include <stdio.h>

void function (int *);

int main ()
{
    /* INITIALIZATION */
    int *example = NULL;

    function (example);

    /* other code */

    free(example);

    return 0;
}

void function (int *example)
{
    /* other code */

    return;
}

[4] 初始化位于NULL的函数中。

#include <stdio.h>

void function (int *);

int main ()
{
    int *example;

    function (example);

    /* other code */

    free(example);

    return 0;
}

void function (int *example)
{
    example = NULL;

    /* other code */

    return;
}

[5] 与[1]相同,但example = realloc (example, DIM * sizeof(int));

[6] 与[2]相同,但example = realloc (example, DIM * sizeof(int));

1 个答案:

答案 0 :(得分:4)

您应该了解有关函数参数如何工作的更多信息。通常在C中,参数是通过值传递的(数​​组和函数的处理方式不同,但首先要做的事情)。所以在[1]中你试图释放没有初始化的指针,因为函数中的赋值对main中的变量示例没有任何作用。 [2]很好。在[3]中,您根本不分配内存,因此对示例指向的任何访问都将无效。 [5]和[6]并不好,因为你没有将初始值传递给realloc。