我想从双指针访问结构的成员,但我得到错误
"错误:'('token"
之前的预期标识符
$(document).ready(function()
{
alert($("body").css("height"));
})
我也尝试过:
struct test{
struct foo **val;
};
struct foo{
int a;
}
int main (){
struct test *ptr = (struct test *)malloc(sizeof(struct test));
ptr->val = &foo;
/*foo is already malloced and populated*/
printf ("Value of a is %d", ptr->(*val)->a);
}
答案 0 :(得分:0)
你想这样做:
#include <stdio.h>
#include <stdlib.h>
struct test {
struct foo **val;
};
struct foo {
int a;
};
int main(void) {
struct test* test_ptr = malloc(sizeof(struct test));
struct foo* foo_ptr = malloc(sizeof(struct foo));
foo_ptr->a = 5; // equivalent to (*foo_ptr).a = 5;
test_ptr->val = &foo_ptr;
printf ("Value of a is %d\n", (*(test_ptr->val))->a);
free(test_ptr);
free(foo_ptr);
return 0;
}
输出:
C02QT2UBFVH6-lm:~ gsamaras$ gcc -Wall main.c
C02QT2UBFVH6-lm:~ gsamaras$ ./a.out
Value of a is 5
在我的例子中:
struct test
动态分配空间。struct foo
动态分配空间。a
的成员foo_ptr
。struct foo
对象的地址分配给
val
的成员test_ptr
。a
双指针val
指向的结构
到。注意,在您的示例中:struct foo
是类型,因此询问其地址是没有意义的。
此外,当您完成struct foo
声明后,您错过了分号。
答案 1 :(得分:-2)
在ptr->val = &foo;
中,foo是一个结构(你在第5到7行声明它)。取其地址不会产生**
,而只会产生*
。
似乎有很多东西都有相同的名字;是结构或其实例的<{1>} 名称,还是两者兼而有之?
然后,当你取消引用它时:foo
看起来确实是错误的序列。
由于ptr->(*val)->a
是ptr->val
的地址(这是您在其上方的行中指定的地址),foo
会是什么?
我认为ptr->(*val)
会为您提供ptr->val.a
。但是,a
仍被声明为val
并始终用作**
。它可能有用,但没有多大意义。