C中的双指针错误,使用void时也会编译错误

时间:2018-08-15 09:45:39

标签: c pointers double

我是C语言的新手,我目前正在学习指针。

我不确定为什么以下几节关于指针的错误:

char ch;     
char** pointer;    
pointer = &ch;

int function1(void) 
{
  return 42.0;
}

void function2(void) 
{
  void (*pointer)(int);
  pointer = &function1;
  ...
}

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:1)

第一个问题是您正在char** pointer中使用双指针,因为您没有存储其他指针的地址,因此应改用char *pointer。 然后您的function1的返回类型为int,但是您返回的是float值,尽管它不会给您任何错误,但会在程序中产生一些逻辑问题,因此最好正确地编写函数定义及其原型中的返回类型。 然后,下一个问题是function2,您的function1返回int,但是不接受任何参数,但是函数指针返回void并接受int,因此您最好将其修改为

int (*pointer)(void);

然后将function1的地址存储在pointer中,它将正常工作。

答案 1 :(得分:0)

*是单个指针,而**是指向该指针的指针。 因此,而不是

char** pointer;

应为:

char* pointer;

在第二种情况下,函数指针原型与它所指向的函数原型不匹配。

所以不是

void (*pointer)(int);

应为:

int (*pointer)(void);

答案 2 :(得分:0)

您的第二部分有一些错误

function1()返回int并且不使用参数

但是您的功能ptr返回void并取int

因此将其更改为:

int (*pointer)(void);

pointer = &function1;