关于在C中使用数组作为指针的问题

sma*_*mam 1 c arrays struct pointers

例如.我有一系列结构'a'如下:

struct mystruct{
    int b
    int num;
};
struct bigger_struct {
   struct my_struct a[10];
}

struct bigger_struct *some_var;
Run Code Online (Sandbox Code Playgroud)

我知道当用作值时数组的名称隐含地引用数组的第一个元素的地址.(这是数组下标运算符如何工作至少)我可以知道相反的方式,即如果我做:

some_var->a->b,它应该相当于some_var->a[0]->b,我是对的吗?我已经测试了这个并且它似乎有效,但这在语义上是100%正确吗?

Jam*_*lis 8

some_var->a->b相当于some_var->a[0]->b

不,它相当于some_var->a[0].b.

数组到指针转换的确切规范实际上非常简单:

除了当它是的操作数sizeof操作者或一元&运算符,或者是用于初始化一个数组,具有键入表达式一个字符串文字 类型的阵列被转换为表达式与类型指针输入指向的初始元件数组对象并不是左值(C99 6.3.2.1).

some_var->a具有类型my_struct[10],它是一个数组类型,并且因为它不是sizeof或一元运算&符的操作数而不是字符串文字,所以它被转换为指向数组初始元素的指针.