作者:gfree.wind@gmail.com
博客:linuxfocus.blog.chinaunix.net
今天的笔记没有一个很好的标题,也很短。主要是针对&与[]操作符
A postfix expression followed by an expression in square brackets [] is a subscripted
designation of an element of an array object. The definition of the subscript operator []
is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that
apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the
initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th
element of E1 (counting from zero).
也就是说对于数组array[10],实际上其等同于*((array)+(10)),也就等于10[array]。
The unary & operator yields the address of its operand. If the operand has type "type", the result has type "pointer to type". If the operand is the result of a unary * operator, neither that operator nor the & operator is evaluated and the result is as if both were omitted, except that the constraint on the operators still apply and the result is not an lvalue. Similarly, if the operand is the result of a [] operator, neither the & operator nor the unary * that is implied by the [] is evalued and the result is as if & operator were removed and the [] operator were changed to a + operator. Otherwise, the result is a pointer to the object or function designated by its operand.
也就说在*&NULL完全是合法的。
请看测试程序:
- #include <stdlib.h>
-
#include <stdio.h>
-
-
int main()
-
{
-
int *p = NULL;
-
int array[10] = {1,2,3,4,5,6,7,8,9,0};
-
-
printf("p is %p and value is %d\n", &*p, 2[array]);
-
-
return 0;
- }
输出:
- p is (nil) and value is 3