有人可以提醒我为什么这有效吗?关于指针的简单问题
要求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