2010-08-29 120 views
2

有人可以提醒我为什么这有效吗?关于指针的简单问题

要求INT *可能作为输入功能的(显然)

int *integer; 

,但它也接受

&var->integer 

使用var是var_t *,其中var_t:

typedef struct { 
    int integer; 
} var_t; 

第二次接受为什么?

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

回答

8

让我们来分解它。

varvar_t*

var->integerint

&var->integerint*

+0

这是我喜欢的思考方式。 – 2010-08-29 21:49:14

3

第二个版本因为ampersand开头而被接受。这意味着该字段的地址被传递,而不是实际的值。

0

第二版本的代码只有好的版本,因为您必须使用&运算符来获取var_t结构中的整数地址。

1

如果var的类型为var_t,那么您显示的代码实际上是非法的。如果它的类型是var_t*,则它被接受,因为var->integer的类型是int&some_int的类型是int*

+0

正确;真正;问题是相同的,但它必须在它的真实世界根源上更加准确。 [编辑并添加它实际上var_t *)。 – 2010-08-29 21:52:03

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