如何通过函数设置指针?

时间:2011-03-31 23:01:07

标签: c pointers

我对C指针有疑问。因为我想知道我是否可以通过函数设置指针。 我的意思是这样的:

void initptr(int **ptr)
{
 ptr = (int *) malloc(sizeof(ptr));
}

int main()
{
    int *ptr;
    initptr(ptr);
}

让我知道。

4 个答案:

答案 0 :(得分:3)

是的,这在C中是可能的,你只是缺少样本中的运算符的解引用和地址

void initptr(int **ptr)
{
  *ptr = (int *) malloc(sizeof(int*));
}

int main()
{
    int *ptr;
    initptr(&ptr);
}

*ptr = ...中的deference运算符将ptr的类型从int**转换为int*,从而使其与赋值兼容。注意:malloc的转换在这里是未加入的。

initptr(&ptr)中的运算符地址将ptr的类型从int*反向转换为int**,从而使其与参数槽兼容。

修改

正如B Mitch所指出的那样,malloc大小也需要更新。您似乎正在分配int*值,因此希望大小为int*的大小。

答案 1 :(得分:1)

我相信你想要这个:

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

答案 2 :(得分:0)

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

您错过了取消引用指针的指针,以便它实际上可以使用指针。

*ptr = (int *) malloc(sizeof(ptr));
// * newly added.

并且调用initptr(ptr);也是错误的。

void initptr(int **ptr) ;

该函数有一个指针指针作为参数。因此,参数ptr需要保存指针的地址。所以,将其更改为 -

 int *ptr = NULL ;  // Initialize pointers to NULL
 initptr(&ptr);     // Passing the pointers address

答案 3 :(得分:0)

是的,但你需要在你的函数中取消引用ptr才能改变它指向的内容

e.g。

void initptr(int **ptr)
{
  *ptr = ...
}

当你调用方法写

initptr( &ptr );