2013-04-07 158 views
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

我尝试了一些办法,但我一直收到错误@@一个


第二部分

//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)在第三行,你有什么解除引用?你有什么存储分配?

4)是什么

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

malloc(sizeof(struct integer3)); 

之间的区别?

回答

3

问题不是解除引用。您尚未为integer3_1分配内存。

0

如果结构integer3被定义为

struct integer3{ 
    intPtr* vPtr; 
}; 

然后将溶液将被如下所示

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

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

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

*intPtr3会给integer3类型的对象。 integer3有一个intPtr*类型的指针vPtr。因此,我们需要为大小为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++环境(如)中开发时,这是必需的。在与gcc一起开发时,这不是必需的。

+0

我试过了代码,但它不工作? – 2013-04-07 09:20:08

+0

@RexRau ..你面临任何“编译”问题或'运行时问题?我在'gcc'上试了这个,它在我的最后工作。 – Ganesh 2013-04-07 09:48:04

+0

ggc是编译器?我使用visual stdio 2012,我认为代码不适用于视觉stdio? – 2013-04-07 11:19:41