100 104 108 112 116
112 |
-1 |
1078523331 |
100 |
108 |
a b c d e
112 |
-1 |
1078523331 |
100 |
108 |
int a = 112, b = -1;
float c = 3.14;
int *d = &a;
float *e = &c;
下面这些表达式的值分别是什么呢?
a
b
c
d
e
前3个非常容易:a的值是112,b的值是-1,c的值是3.14。指针变量其实也很容易,d的值是100,e的值是108。如果你认为d和e的值分别是112和3.14,那么你就犯了一个极为常见的错误。d和e被声明为指针并不会改变这些表达式的求值方式:一个变量的值就是分配给这个变量的内存位置所存储的数值。如果你简单地认为由于d和e是指针,所以它们可以自动获得存储于位置100和108的值,那么你就错了。变量的值就是分配给该变量的内存位置所存储的数值,即使是指针变量也不例外。