将指针传递给C中的另一个函数

时间:2013-10-28 22:57:51

标签: c pointers dereference

说我有一个变量

int * foo;

我将此变量传递给

func(int *x)
{
  *x = bar;
}

然而,这不起作用。但是,如果我放一个非指针(比如把它更改为 int foo; )并直接输入地址,这就行了。

为什么我的第一个案例不起作用?

谢谢!

3 个答案:

答案 0 :(得分:3)

您的代码正在完成您所说的内容。但是,int *foo不分配任何存储空间。指针只是内存地址的句柄。在这种情况下,它是任意的并导致未定义的行为。请尝试以下方法。

void func(int *x) {
   *x = 42;
}

int main(int argc, char** argv) {
    int *foo;
    int  storage;

    foo = &storage;
    func(foo);
    printf("%d\n" storage);

    return 0;
}

foo只是指向storage的指针,它由运行时分配在堆栈上。在这种情况下,你也可以使用foo(&storage)

答案 1 :(得分:1)

通过声明int * foo,你只创建了一个指针。 foo实际上并没有指向任何东西 - 它没有被初始化。您甚至可能会从这样的代码中获得分段错误,因为指针可能指向程序存储器之外。如果你这样做:

int * foo = (int *)malloc(sizeof(int));

你将初始化指针,malloc从传递给它的大小的堆中分配一些内存。你也可以这样做:

int bar = 0;
int * foo = &bar;

这将使foo成为指向bar的指针(&返回变量的地址)。

答案 2 :(得分:0)

你应该做这样的事情

int bar = 235; // any value you want

void func(int *x)
{
    *x = bar;
}

int main()
{
    int *foo;
    foo = (int*)malloc(sizeof(int));
    func(foo);

    printf("%d", *foo);
    free(foo);

    return 0;
}