转自:http://blog.csdn.net/qq_31810357
1、内存中的最小存储单元叫字节,为了方便我们操作内存中的数据,生产商对每一个内存中的存储单元进行编号,这个编号叫做地址,地址其实就是指针,指针其实就是地址;
2、
// & 取地址符号//
&a 取到a的地址,并返回
// %p是地址的占位
printf("%p\n",&a);//a空间内存的首地址.
3、
/指针变量定义的格式
//类型修饰符 *指针变量名 = 初始值;//在定义指针变量的时候*就是一个指针的标示符,告诉编译器这是和指针变量
int *p = NULL;//最小的地址单位0x0
printf("%p\n",p);
//取出变量b的地址赋值给指针变量p
p = &b;
//类型修饰符 *指针变量名 = 初始值;//在定义指针变量的时候*就是一个指针的标示符,告诉编译器这是和指针变量
int *p = NULL;//最小的地址单位0x0
printf("%p\n",p);
//取出变量b的地址赋值给指针变量p
p = &b;
printf("p地址 = %p b地址 = %p\n",p,&b);
4、指针常见的问题
//内存编号比较小的内存单元是有系统控制的,不允许访问
// int *p = NULL;
// *p = 10; error!!!
定义指针的时候一定要赋初始值,如果不赋初始值,这个指针就是野指针,操纵野指针是很危险的;
// int *p
// *p = 100;
int
*p3 =
NULL
;
//苹果写法推荐写法;因为苹果公司就是这么写的;
5、
//p + 1 ++ p p ++ 的关系
//相同:取到的都不是下一个空间的首地址
//相同:取到的都不是下一个空间的首地址
//不同:p + 1没有造成指针的重指向,++p 和 p++ 造成了指针的重指向