-1

我有以下文件结构。我知道指针需要分配内存。文件 A 由达芬奇生成。主要是我写的。

// File A
typedef struct {
    int v1;
}s1;

struct s2{
    s1 *p1;
};

extern const struct s2 * const p3;  // Expr 1
#define untilp1() (*(&p3->p1))  // Expr 2

// File main
#include <stdio.h>
#include "FileA.h"
int main()
{
    int v2 = 10;
    untilp1()->v1 = v2;  // This line results in failure
    return 0;
}
    

Q1 - 我不明白表达式 1。具体来说,我不明白 expr 1 中使用了这么多 const 关键字。我知道术语 extern 的含义。在这种情况下,我猜一个常量指针p3是未定义的,未声明的,但编译器知道它指向常量结构s2。它是否正确?如果你能说得更清楚,请详细说明。

Q2 - 我不明白表达式 2。具体来说,我不明白发生了什么(*(&p3->p2))。我知道 的意思#define。请详细解释表达式。

Q3 - 在一般编码中,我malloc在声明使用指针之前分配内存,例如使用。当这些文件由达芬奇生成时,我不确定这是如何处理的。但是我还没有看到我的任何同事使用 malloc 等。有谁知道我是否可以将价值分配v2v1using p3or untilp1()

谢谢你。

4

1 回答 1

0

Q1:p3是一个const指针(意思是指针本身不能改变)到一个也不能改变的const struct s2意思struct s2

Q2:*(&p3->p1)获取struct p3' 成员的地址,p1然后取消引用它。使用该宏定义,分配需要是:(untilp1())->v1 = v2;. 请参阅运算符优先级。我的建议是将括号放在宏中。

Q3:“一般编码” - 我认为这需要一个单独的问题。它可能是基于意见的。

演示

于 2021-11-03T10:51:56.753 回答