相关疑难解决方法(0)

限制指针算术或比较的基本原理是什么?

在C/C++中,仅当结果指针位于原始指向的完整对象内时,才定义指针的加法或减法.此外,只有当两个指向对象是唯一完整对象的子对象时,才能执行两个指针的比较.

这种限制的原因是什么?

我认为分段内存模型(参见这里 §1.2.1)可能是其中一个原因,但由于编译器实际上可以定义所有指针的总顺序,如本答案所示,我对此表示怀疑.

c c++ pointers pointer-arithmetic language-lawyer

26
推荐指数
3
解决办法
1195
查看次数

你如何在struct上使用offsetof()?

我想要offsetof()参数行mystruct1.我试过了

offsetof(struct mystruct1, rec.structPtr1.u_line.line) 
Run Code Online (Sandbox Code Playgroud)

并且

offsetof(struct mystruct1, line)  
Run Code Online (Sandbox Code Playgroud)

但都不起作用.

union {
    struct mystruct1 structPtr1;
    struct mystruct2 structPtr2;
} rec;

typedef struct mystruct1 {
    union {
        struct {
            short len;
            char buf[2];
        } line;

        struct {
            short len;
        } logo;

    } u_line;
};
Run Code Online (Sandbox Code Playgroud)

c

7
推荐指数
1
解决办法
5831
查看次数

标签 统计

c ×2

c++ ×1

language-lawyer ×1

pointer-arithmetic ×1

pointers ×1