一、地址的概念引入
变量的访问有两种方式:
1、变量名
printf("ju = %d\n",juHuaTai);
2、地址
printf("ju = %d\n",*(&juHuaTai));
printf("ju的地址是:%p\n",&juHuaTai);
二、指针变量的引入
- 什么变量能存放地址?
答:指针变量
- 怎样才能定义一个指针变量?
答: int *p ; p = &a 或 int *p = &a
只有在定义一个指针变量的时候才是指针的标识符,其他情况都是一个运算符,跟+ - * / 类似,该运算符的功能是取出内存地址中数据的值(取内容)
- 数组指针的两种表示方式:
①数组名
int array[10];
int *p;
p = array;
②第一个元素的地址
int array[10];
int *p;
p = &array[0];
char *array = "1234567890";
以上的数组定义,得到的是静态的数组,其值在定义之后就不可改变,如果强行改变就会发生段错误。
char *array[] = "1234567890";
这样得到的数组,其值是动态的,定义之后依然可以改变。
三、偏移
- 指向谁(类型) p = &a
- 偏移后指向谁 p++
int *p:p++偏移了4个字节
char *p:p++偏移了1个字节
四、为什么要用指针
强制使指针地址保存在指定地址(多用于ARM架构、ARM逻辑编程、ARM驱动)
例:
int *p2 = (int *)0X0060FF00;
*p2 = 10;
printf("在内存的%p位置,存放值是%d \n",p2,*p2);
运行结果:在内存的0X0060FF00位置,存放值是10