有人可以提醒我爲什麼這有效嗎?關於指針的簡單問題
要求INT *可能作爲輸入功能的(顯然)
int *integer;
,但它也接受
&var->integer
使用var是var_t *,其中var_t:
typedef struct {
int integer;
} var_t;
第二次接受爲什麼?
編輯:oopsy,問題是相同的,但var實際上是var_t *(而不是var_t)更準確。
有人可以提醒我爲什麼這有效嗎?關於指針的簡單問題
要求INT *可能作爲輸入功能的(顯然)
int *integer;
,但它也接受
&var->integer
使用var是var_t *,其中var_t:
typedef struct {
int integer;
} var_t;
第二次接受爲什麼?
編輯:oopsy,問題是相同的,但var實際上是var_t *(而不是var_t)更準確。
讓我們來分解它。
var
是var_t*
。
var->integer
是int
。
&var->integer
是int*
。
第二個版本因爲ampersand開頭而被接受。這意味着該字段的地址被傳遞,而不是實際的值。
第二版本的代碼只有好的版本,因爲您必須使用&運算符來獲取var_t結構中的整數地址。
如果var的類型爲var_t
,那麼您顯示的代碼實際上是非法的。如果它的類型是var_t*
,則它被接受,因爲var->integer
的類型是int
而&some_int
的類型是int*
。
正確;真正;問題是相同的,但它必須在它的真實世界根源上更加準確。 [編輯並添加它實際上var_t *)。 – 2010-08-29 21:52:03
你算算你的自我:
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
這是我喜歡的思考方式。 – 2010-08-29 21:49:14