C 指令说明

发布于 2024-11-01 16:39:24 字数 164 浏览 4 评论 0原文

任何人都可以解释以下说明:

int *c[10];

char *(**n)(void);

float *(**r(void))[6];


short *(**v(void))(int);


long *(*(*(*z)(void))[7])(void);

can any one explain the following instructions:

int *c[10];

char *(**n)(void);

float *(**r(void))[6];


short *(**v(void))(int);


long *(*(*(*z)(void))[7])(void);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寄居人 2024-11-08 16:39:24

http://www.cdecl.org/ 将解释所有这些陈述。 C 右左规则 解释了如何很好地阅读 C 的减法。还有大量其他可用资源,尤其是此问题

http://www.cdecl.org/ will explain all these statements. C Right-Left rule explains how to read C declerations pretty well. There are plenty of other resources available, notably in this question.

德意的啸 2024-11-08 16:39:24

因为这是你的作业,你不会通过我告诉你一切来学到这一点;)但是,有一个提示。您可以创建并将指针传递给 C 中的函数,而不仅仅是变量。

除第一个示例之外的所有函数参数都是函数指针的原型。

假设我们有一个用于测试颜色的库,我们可能希望允许库的用户提供获取颜色名称的自定义方法。我们可以定义一个结构体,供用户传入,其中包含我们可以调用的回调。

struct colour_tester {
  char *(*colour_callback)(void);    
}

// test the user's function if given
void run_test(struct colour_tester *foo ){
  // use the callback function if set
  if ( foo->colour_callback != NULL ){
    char * colour = (*foo->colour_callback)();
    printf( "colour callback returned %s\n", colour );
  }
}

然后,该库的用户可以自由定义这些回调函数的实现,并将它们作为函数指针传递给我们。

#include <colour_tester.h>

char * get_shape_colour(){
  return "red";
}

int main ( int argc, char** argv ) {
  // create a colour tester and tell it how to get the colour
  struct colour_tester foo;
  foo.colour_callback = &get_shape_colour;
  run_test( &foo );
}

我让你去弄清楚那些带有额外数量的 * 的情况是怎么回事。

Since this is your homework you won't learn this by me telling you everything ;) But, one hint. You can create and pass pointers to functions in C, not just variables.

Function arguments of all but the first example are prototypes for function pointers.

Say we have a library for testing colours, we might want to allow the users of our library to provide custom ways of getting the name of the colour. We might define a struct for users to pass in containing callbacks we can call.

struct colour_tester {
  char *(*colour_callback)(void);    
}

// test the user's function if given
void run_test(struct colour_tester *foo ){
  // use the callback function if set
  if ( foo->colour_callback != NULL ){
    char * colour = (*foo->colour_callback)();
    printf( "colour callback returned %s\n", colour );
  }
}

Users of the library would then be free to define implementations of these callback functions and pass them to us as a function pointer.

#include <colour_tester.h>

char * get_shape_colour(){
  return "red";
}

int main ( int argc, char** argv ) {
  // create a colour tester and tell it how to get the colour
  struct colour_tester foo;
  foo.colour_callback = &get_shape_colour;
  run_test( &foo );
}

I've leave you to work out what is going on with the ones with extra numbers of *s.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文