2010-08-29 121 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