1

可能重复:
在 C 数组中,为什么这是真的?a[5] == 5[a]

  1. 如果 p 是一个指针(比如int * p),那么[p]意味着什么?还有什么4[p]意思?(即将标量与 [p] 相乘)

  2. 假设 xyz 是程序中定义的某种数据类型。然后做什么

    void (*xyz)(void);
    

    声明是什么意思?

4

4 回答 4

6
  1. 4[p]意思相同p[4]。参见例如http://c-faq.com/aryptr/joke.html

  2. 如果xyz已经是一种数据类型,那么这是一个错误。如果不是,那么它是一个名为 的函数指针的定义xyz。假设您的意思是“ void”不是“ coid”,那么cdecl.org 会告诉我们:

    将 xyz 声明为指向返回 void 的函数 (void) 的指针

于 2013-01-20T12:34:27.940 回答
3
于 2013-01-20T12:38:40.830 回答
2

是什么[p]意思?

本身没什么。

还有什么4[p]意思?

由于指针算术,4[p]意味着*(4 + p),即,假设加法是可交换的,等价于*(p + 4),而后者又可以写为p[4],即它是 指向的数组的第 5 个元素p

如果xyz是数据类型,那么void (*xyz)(void);语句是什么意思?

那么这是一个语法错误。

如果xyz不是数据类型,则它声明xyz为函数指针获取和返回void(即“无”)。

于 2013-01-20T12:36:21.960 回答
2

1) 4[p] 与 p[4] 的含义相同,两者本质上都意味着 *(p+4) ,这意味着从数组开始的第 5 个元素p

2)xyz是指向函数的指针类型,它不接受任何争论并且不返回任何内容。

typedef void (*xyz)(void);    

void func();

xyz f= func;

如果以下列方式使用,它也可能是函数指针本身

//imagine the above typedef is omitted.

void (*xyz)(void) = func;

void (*xyz)(void);  // uninitialized pointer.
于 2013-01-20T12:36:37.263 回答