假设我有两种结构,
this.SetCrossPageValue("my cross page value");
var crossPageValue = this.GetCrossPageValue();
主要功能如下:
struct ptr1
{
struct ptr2 *ptrtoptr;
};
struct ptr2
{
int name;
};
如何通过指针int main()
{
struct ptr1 *var1;
struct ptr2 *var2;
(code for manipulating structure element name);
return 0;
}
操纵变量name
的数据?假设两个指针都已指向某个地址。
这是对的吗? var1
或var1->(var2->name)=(some value)
?
答案 0 :(得分:7)
如何通过指针var1操作变量名的数据?
使用:
var1->ptrtoptr->name = some_value ; // or (var1->ptrtoptr)->name
var1->(var2->name)=(some value)
或(var1->var2)->name=(some value)
都没有意义,因为var2
不是ptr1
的成员,无法使用var1
<无法访问->
/ p>
注意:另外,请注意操作员关联性,操作员var1->(ptroptr->value)
具有从左到右的关联性,因此var1->ptrtoptr->name
与{{1}不一样}
答案 1 :(得分:0)
我想说编写有助于分配和释放结构的函数非常重要。这将有助于防止内存泄漏,什么不是。我写了一个示例程序来展示我的意思。另一个最佳答案准确地回答了你的问题,我只是想加上我的两分钱。
#include <stdio.h>
#include <stdlib.h>
struct ptr1
{
struct ptr2 *ptrtoptr;
};
struct ptr2
{
int name;
};
struct ptr1* createPtr1() {
struct ptr1* var1 = (struct ptr1 *) malloc(sizeof(struct ptr1));
var1->ptrtoptr = (struct ptr2 *) malloc(sizeof(struct ptr2));
return var1;
}
void freePtr1(struct ptr1* var1) {
free(var1->ptrtoptr);
free(var1);
}
int main()
{
struct ptr1 *var1;
struct ptr2 *var2;
var1 = createPtr1();
var1->ptrtoptr->name = 42;
printf("%d\n", var1->ptrtoptr->name);
freePtr1(var1);
return 0;
}