1
struct integer3_1 {
    int value3;
};

typedef struct integer3_1* intPtr;

struct integer3{
    intPtr* vPtr;
};

typedef struct integer3* intpointer3;   

int main() {
    int value = 5;
    intpointer3 intPtr3 = (intpointer3)malloc(sizeof(struct integer3));
    //(*intPtr3->vPtr)->value3 = value;
    //(*(*intPtr3).vPtr)->value3 = value;
    //(*intPtr3->vPtr)->value3 = &value;
    //(*(*intPtr3).vPtr)->value3 = &value;

return;

}

你好,我有一个问题

如何取消引用 intPtr3 以便能够将 5 的值存储到intPtr3->vPtr->value3

我尝试了几种方法,但我一直收到错误@@a


第二部分

//1st line
intpointer3 intPtr3 = (intpointer3)malloc(sizeof(struct integer3));
//2nd line
(*intPtr3).vPtr = (intPtr*)malloc(sizeof(intPtr));
//3rd line
*((*intPtr3).vPtr) = (intPtr)malloc(sizeof(struct integer3_1));

1) 在第一行,它为 intpointer3 分配存储空间?

2) 在第二行,您取消引用并为 intPtr 分配存储空间?

3)在第 3 行,你取消引用了什么?你分配了什么存储空间?

4)有什么区别

(intpointer3)malloc(sizeof(struct integer3));

malloc(sizeof(struct integer3));

?

4

2 回答 2

3

问题不在于取消引用。你还没有分配内存integer3_1

于 2013-04-07T08:55:24.970 回答
0

如果结构integer3定义为

struct integer3{
    intPtr* vPtr;
};

那么解决方案将如下所示

intpointer3 intPtr3 = (intpointer3)malloc(sizeof(struct integer3));

intPtr3intPointer3是与 相同的类型integer3 *。因此,首先我们需要为 size 的对象分配空间integer3

(*intPtr3).vPtr = (intPtr *)malloc(sizeof(intPtr));

*intPtr3将给出一个类型的对象integer3integer3有一个vPtr类型的指针intPtr*。因此,我们需要为一个大小的对象分配空间intPtr并将其分配给vPtr这个语句。

*((*intPtr3).vPtr) = (intPtr)malloc(sizeof(struct integer3_1));

(*intPtr3).vPtr将给出一个intPtr *与 相同类型的对象integer3_1 **。因此,该语句*((*intPtr3).vPtr)将取消引用与*(integer3_1 **)相同的integer3_1 *。因此,我们需要为一个大小的对象分配空间struct integer3_1并将其分配给这个指针。

(*((*intPtr3).vPtr))->value3 = value;

运算符的 LHS->是一个类型的指针,integer3_1 *因此要访问value3,因此需要->运算符。

printf("Value is %d\n", (*((*intPtr3).vPtr))->value3);

最后一个问题:

(intpointer3)malloc(sizeof(struct integer3));

malloc(sizeof(struct integer3));

除了我们将分配的指针显式类型转换为intpointer3或者更确切地说integer3 *在第一种情况下,它们是相同的。这是在C++MSVC++. 使用 进行开发时,这不是必需的gcc

于 2013-04-07T09:09:05.490 回答