我是C语言的新手,我目前正在学习指针。
我不确定为什么以下几节关于指针的错误:
char ch;
char** pointer;
pointer = &ch;
和
int function1(void)
{
return 42.0;
}
void function2(void)
{
void (*pointer)(int);
pointer = &function1;
...
}
任何帮助将不胜感激:)
答案 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;