我对C指针有疑问。因为我想知道我是否可以通过函数设置指针。 我的意思是这样的:
void initptr(int **ptr)
{
ptr = (int *) malloc(sizeof(ptr));
}
int main()
{
int *ptr;
initptr(ptr);
}
让我知道。
答案 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 );