C 指针:关于指针的查询
我在学C和C。我正在学习指针,不知道将间接运算符和地址运算符组合起来意味着什么。将两者结合起来意味着什么 以下是一个例子:C 指针:关于指针的查询,c,pointers,expression,indirection,addressof,C,Pointers,Expression,Indirection,Addressof,我在学C和C。我正在学习指针,不知道将间接运算符和地址运算符组合起来意味着什么。将两者结合起来意味着什么 以下是一个例子: int *p, *q; p = *&q; 它意味着它必须意味着什么。:) 如果从左到右阅读,则右侧仅表示“通过跟随值为q地址的指针检索的值” 与p=*(&q)相同,因此它与p=q 我甚至没有注意到,但是您的程序将p和q声明为指针是错误的。不会编译的,应该是: int p, q; p = *&q; 此外,这可能有点定义不清,因为在读取之前
int *p, *q;
p = *&q;
它意味着它必须意味着什么。:) 如果从左到右阅读,则右侧仅表示“通过跟随值为
q
地址的指针检索的值”
与p=*(&q)相同代码>,因此它与p=q代码>
我甚至没有注意到,但是您的程序将p
和q
声明为指针是错误的。不会编译的,应该是:
int p, q;
p = *&q;
此外,这可能有点定义不清,因为在读取之前,q
从未分配过一个值,对此没有100%的把握。它意味着它必须意味着什么。:)
&q;
如果从左到右阅读,则右侧仅表示“通过跟随值为q
地址的指针检索的值”
与p=*(&q)相同代码>,因此它与p=q代码>
我甚至没有注意到,但是您的程序将p
和q
声明为指针是错误的。不会编译的,应该是:
int p, q;
p = *&q;
此外,这可能有点定义不清,因为q
在被读取之前从未被赋值,对此不是100%确定
&q;
会给你变量q的地址,也就是说它是一个指向q的指针,我们可以写
int ** pointerToQ = &q;
如果我们说
*pointerToQ
我们要问的是EverPointerToq指向什么,也就是q本身。所以
*&q
让我们回到q
会给你变量q的地址,也就是说它是一个指向q的指针,我们可以写
int ** pointerToQ = &q;
如果我们说
*pointerToQ
我们要问的是EverPointerToq指向什么,也就是q本身。所以
*&q
让我们回到q.您的示例将指针p设置为指针q的值。它对p和q指出的值没有任何影响。它只是将变量p设置为变量q的值,这两个变量恰好都是指向整数值的指针。让我们看一些例子:
*p = *q; // the value at the address pointed by q, gets copied to the address, pointed by p
p = &q; // this is illegal, since the type of &q is int ** (pointer to a pointer to an integer), but the type of p is int *
您的示例将指针p设置为指针q的值。它对p和q指出的值没有任何影响。它只是将变量p设置为变量q的值,这两个变量恰好都是指向整数值的指针。让我们看一些例子:
*p = *q; // the value at the address pointed by q, gets copied to the address, pointed by p
p = &q; // this is illegal, since the type of &q is int ** (pointer to a pointer to an integer), but the type of p is int *
&
可以看作是()的地址。所以&q
是q的地址。现在,*
可以看作是()处的值。因此*q基本上是存储在q中包含的地址处的值,即,*
将变量视为始终包含地址。现在*&q,由结合性决定为*(&q)。也就是说
存储在(q地址)的值
与存储在q的值相同
q的地址将有另一个地址,因为q是指针。所以这和
p=q
&
可以被认为是()
运算符的地址。所以&q
是q的地址。现在,*
可以看作是()处的值。因此*q基本上是存储在q中包含的地址处的值,即,*
将变量视为始终包含地址。现在*&q,由结合性决定为*(&q)。也就是说
存储在(q地址)的值
与存储在q的值相同
q的地址将有另一个地址,因为q是指针。所以这和
p=q
将其视为提升到一个权力并获得一个(正)根。基本上,他们只是互相抵消。把它看成是提升到一个权力,采取一个(积极的)根。基本上,它们只是相互抵消。