在这个线程中,它用于&x + 1确定一些随机struct x的大小.我想知道为什么这是一个合法的解决方案?这会导致分段错误吗?
我的理解是只要&x + 1保留在当前线程可访问的内存中,它就可以了,但是如果&x + 1以某种方式尝试访问超出其允许范围的内存,则会导致seg错误,是吗?
第三,C标准明确允许指针指向一个超过数组末尾的指针.
...如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不会产生溢出...
正如@alk指出的那样,在进行指针运算时,指向对象的指针被视为长度为1的数组.
出于这些运算符的目的,指向不是数组元素的对象的指针与指向长度为1的数组的第一个元素的指针的行为相同,其中对象的类型为其元素类型.
(从第6.5.6.8和C99草案6.5.6.7 这里)
首先,在C中,所有线程都可以访问任何线程都可访问的所有内存.线程在这里不是问题.
其次,您永远不会取消引用指针&x + 1,因此您无论如何都无法访问任何内存.
所以你的代码是正确的.