有人能提醒我为什么会这样吗?
需要int *的函数可以作为输入(显然)
int *integer;
但它也可以接受
&var->integer
var为var_t *,其中var_t:
typedef struct {
int integer;
} var_t;
为什么第二个被接受?
编辑:oopsy,问题相同,但var实际上是var_t *(而不是var_t)更精确。
答案 0 :(得分:8)
让我们把它分解。
var
是var_t*
。
var->integer
是int
。
&var->integer
是int*
。
答案 1 :(得分:3)
第二个版本因为ampersand开头而被接受。这意味着传递了字段的地址,而不是实际值。
答案 2 :(得分:1)
如果var的类型是var_t
,那么您显示的代码实际上是非法的。如果其类型为var_t*
,则会被接受,因为var->integer
的类型为int
且&some_int
的类型为int*
。
答案 3 :(得分:0)
第二版代码只是好版本,因为你必须使用&运算符以获取var_t结构中的整数地址。
答案 4 :(得分:0)
自己算数:
int a => &a is of type int*
int *a => &a is of type int**
int **a => &a is of type int***
等
int *a => *a is of type int
int **a => a is of type int**
int **a => *a is of type int*
int **a => **a is of type int