繁体   English   中英

C函数指针混乱,什么是“变量的指针级别”?

[英]C function pointer confusion, what is meant by “pointer level of the variable”?

这是代码:

char *(*strcpy_ptr)(char *dst, const char *src); Pointer to strcpy-like function

教程说:

请注意上述声明中* strcpy_ptr的括号。 它们将指示返回类型(char *)的星号与指示变量的指针级别的星号(* strcpy_ptr —一级,指向函数的指针)分开。

我迷路了-“功能指针”在哪里,“指针级别”在哪里?

您正在声明一个变量strcpy_ptr 您希望此变量是指向返回char*的函数的指针。 如果您这样做是在没有括号的情况下进行的:

char **strcpy_ptr(char *dst, const char *src);

这将是返回char**的函数的原型 -不是您想要的。 圆括号将用变量将一颗恒星分组,并将该恒星与返回类型分开。

请记住,指针的声明是这样的:

T *var;

其中T是某种类型。 添加的星星越多,在最终达到实际T之前添加的间接层越多。 因此char **c将是一个指向char的指针。 对于函数指针,这是相同的: Tchar* ,而*var必须用括号分隔,因为C忽略空格。 C刚刚添加了一些额外的语法来指定指针所指向的函数类型和参数数量。 这只是C工作方式的一部分。

没有括号,您将拥有:** strcpy_ptr

这是指向指针或双向间接寻址的指针。 我认为“一个级别”意味着只有一个间接级别。

@Adel:以上注释的所有大部分都是有意义的(有一些挑剔的异常,例如C不能理解空白),我仍然建议您阅读Kernighan和Ritchie撰写的“ C编程语言”,第二版,第二章5.11以及特别是第5.12章(复杂表达式-p122):您会发现很多复杂的示例,理解每个示例都很重要。

特别是,了解以下两者之间的区别:

  1. 字符(*(* x())[])()

2.char(*(* x [])())[]

cforfun。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM