一、数据的地址和通过地址访问数据
1、基本的数据类型的地址
int a;==>&a//变量a的地址
2、数组的地址
int a[5]; ==>&a,a,&a[0]
3、函数的入口地址
函数名 或者 &函数名
4、通过地址去访问内存中的数据
通过间接访问运算符*访问内存中的数据
二、指针的基本概念
1、定义:
变量的地址称为变量的指针。
存放指针的变量称为指针变量,指针也是一个变量,它存储其他变量的地址。
【注意】每个指针变量只能指向一种特定类型的变量。
2、声明和初始化、赋值
详见4.c
3、使用指针访问内存单元
指针前面加*,表示指针所指向的内存单元
4、指针变量的大小(占用内存空间的大小)
与指针所指向的数据类型的大小没有关系,与操作系统的位数有关系。
指针是一个无符号整数。
5、void 指针
void *p:通用指针,代表可以指向任意类型。
【注】使用指针访问内存的方法
1、指针在声明和赋值的时候一定要正确,明确指针到底指向谁。
2、根据指针的指向关系,画出内存单元图,找出指针所指向的内存单元。
三、指针与数组(掌握)
数组名代表数组中第一个元素的地址,可以将数组名赋值给与其相同数据类型的指针。
使用数组名访问数组,与使用这个指针访问数组,效果一样。
四、指针与函数(掌握)
1、指针作为函数的参数,传递的是地址,通过地址间接访问内存单元,可以修改指定的内存单元。
练习:
1、使用函数交换两个整型变量,调用函数结束后,两个 整型变量的值真的交换了。
2、写一个函数sumAndMinus,可以同时计算2个整型变量的和与差,函数执行完毕之后,返回和与差。
参见11.c
2、数组作为函数的参数
数组作为函数参数,实际上需要传递数组首地址,即这个参数是指针类型。
3、指针作为函数的返回值
参加13.c
五、【扩展】指针的运算(了解)
详见14.c
1、加
加1:加上指向的数据类型的大小。
两个指针相加:无意义。
2、减
减1:减去指向的数据类型的大小
两个指针相减:表示两个指针所指向的变量之间相差的元素个数(常常用在数组中)
3、比较
两个指针的比较,实际上是两个指针所指向的变量的地址进行比较(两个指针所指向的数据类型必须相同,否则比较无意义)。
六、【扩展】const修饰的指针(了解)
详见15.c
1、const关键字
常量
(1)const 数据类型 变量名=变量初值;
(2)数据类型 const 变量名=变量初值;
【注】常量在声明的同时必须初始化,否则无意义。
2、const修饰指针
(1)const int *a;和int const *a;
a的指向可以修改; a指向的内容不能修改
(2)int *const a;
a的指向不能修改; a指向的内容可以修改
(3)const int * const a;
a的指向不能修改; a指向的内容也不能修改
【注】const 修饰谁,谁不能修改