`restrict`关键字隐含的严格别名级别是多少?

rat*_*ath 2 c arrays struct strict-aliasing

我有以下结构:

typedef struct{
    int data[LENGTH];
}Data;
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

Data* dt=CALLOC(...)

int foo(Data* restrict d){
    for(...)
        d[i]->data[j];
    //do stuff with data[]
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:删除严格别名是否d也影响其成员或我是否需要restrict单独使用它们?换句话说,是否restrict意味着结构中包含的所有指针得到相同的处理?

编辑:通过别名级别我的意思是,如果指向结构的指针被restrict编辑,其中包含的任何其他指针也会被限制(就像我的例子一样).

gsg*_*gsg 5

restrict 仅适用于带注释的指针本身(或从其生成的指针,例如通过指针算术),而不适用于通过该指针检索的任何值.

我不确定'严格别名'的含义应该是什么意思,但是restrict比严格别名更有说服力.严格别名允许兼容类型的指针到别名:restrict是一个没有别名的承诺.