C语言restrict限定符是否通过多级指针间接传递?
restrict限定符是否通过多级指针间接传递?
这段代码是有效代码,val必然等于1,restrict不会通过多级指针间接传递。
核心逻辑说明
restrict的约束范围非常明确:它只限定被标注的指针本身指向的内存区域,要求在该指针的生命周期内,这块内存只能通过该指针(或从它直接派生的指针)来修改。它不会“渗透”到指针指向的结构体内部的指针成员上。
回到你的代码场景:
examineFoos函数的两个参数foo1和foo2是struct Foo* restrict,这意味着foo1指向的那个Foo结构体实例,只能通过foo1来修改;foo2指向的Foo实例同理。但main里的foo1和foo2是两个完全独立的struct Foo变量,内存不重叠,完全符合restrict的使用要求。- 至于
foo1->bar和foo2->bar指向同一个Bar实例,这和foo1、foo2的restrict限定没有关系——restrict不会把约束传递给结构体内部的指针成员。函数里通过foo1->bar修改bar.b,再通过foo2->bar读取,是完全合法的操作,读取到的肯定是修改后的1,不存在未定义行为。
内容的提问来源于stack exchange,提问作者MicroVirus
相关产品推荐
相关产品推荐

