关于指针的简单问题

时间:2010-08-29 21:42:49

标签: c

有人能提醒我为什么会这样吗?

需要int *的函数可以作为输入(显然)

int *integer;

但它也可以接受

&var->integer

var为var_t *,其中var_t:

typedef struct {
    int integer;
} var_t;

为什么第二个被接受?

编辑:oopsy,问题相同,但var实际上是var_t *(而不是var_t)更精确。

5 个答案:

答案 0 :(得分:8)

让我们把它分解。

varvar_t*

var->integerint

&var->integerint*

答案 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