指针
1. 声明为指针并不会改变这些表达式的求值方式。
2. 一个变量的值就是分配给这个变量的内存位置所存储的数值。
3. 变量的值就是分配给该变量的内存位置所存储的数值,即使是指针变量也一样。
4. 内存中的每个位置由一个独一无二的地址标识。
5. 内存中的每个位置包含一个值。
6. 变量名字与内存位置之间的关联不是硬件所提供的,它是由编译器为我们实现的。
所有这些变量给了我们一种更方便的方法记录地址--硬件仍然通过地址访问内存位置。
#include <stdlib.h>
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 112, b =-1;
float c = 3.14;
int *d = &a;
float *e = &c;
printf("a: %d\n",a);
printf("b: %d\n",b);
printf("c: %f\n",c);
//变量的值
printf("*d: %p\n",d);
printf("*e: %p\n",e);
//指向地址所 存储的数值
printf("*d ->value: %d\n",*d);
printf("*e ->value: %f\n",*e);
//变量本身所存储的地址
printf("&d ->address: %p\n",&d);
printf("&e ->address: %p\n",&e);
return 1;
}
/**
➜ cmake13 git:(master) ✗ ./a.out
a: 112
b: -1
c: 3.140000
*d: 0x7ff7b44b9f5c
*e: 0x7ff7b44b9f54
*d ->value: 112
*e ->value: 3.140000
➜ cmake13 git:(master) ✗ cc main.c
➜ cmake13 git:(master) ✗ ./a.out
a: 112
b: -1
c: 3.140000
*d: 0x7ff7b907ff5c
*e: 0x7ff7b907ff54
*d ->value: 112
*e ->value: 3.140000
&d ->address: 0x7ff7b907ff48
&e ->address: 0x7ff7b907ff40
➜ cmake13 git:(master) ✗
*/