第七章 指针
指针(pointer)简介
- 指针是一个值为内存地址的变量(或数据对象)
见图c
声明即初始化指针变量
基本用法:数据类型 * 指针变量名;
例如:
- int * ptr_num;
- char * ptr_name;
- float * money_ptr;
- double * p_price;
注意:
在头文件<stdio.h>中,NULL被定义为常量
int * ptr_num = NULL;
指针的初始值设为空,表示指针不指向任何地址
取地址符&
见图d
1 | int num = 1024; |
间接运算符
见图e、f
1 | int num = 1024; |
指针使用示例
1 |
|
1 |
|
指针小结
指针同样是一个变量,只不过该变量中存储的是一个对象的内存地址
如果一个变量存储另一个对象的地址,则称该变量指向这个对象
指针变量可以赋值,指针的指向在程序执行中可以改变
指针p在执行中某刻指向变量x,在另一时刻也可以指向变量y
注意:
1、指针变量的命名规则和其他变量的命名规则一样
2、指针不能与现有变量同名
3、指针可存放c语言中的任何基本数据类型、数组和其他所有高级数据结构的地址
4、若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址
1 |
|
指针与数组
- 数组:
- 存储在一块连续的内存空间中
- 数组名就是这块连续内存空间的首地址
1 | double score[5] = {98,87,65,43,76}; |
见图g
指针运算
- 指针的算数运算
- 指针的递增和递减(++、–)
1 | int i; |
- 注意:一个类型为T的指针移动,以sizeof(T)为移动单位
数组与指针小结
int num[50];//num是数组名,也是数组的首地址
num的值与&num[0]的值是相同的
数组第i+1个元素可表示为:
- 第i+1个元素的地址:&num[i]或num+i
- 第i+1个元素的值:num[i]或*(num+i)
为指向数组的指针赋值:
- int * ptr_num = num; 或int * ptr_num = &num[0];
指针变量可以指向数组元素
- int * ptr_num = &num[4]; 或 int * ptr_num = num + 4;
1 |
|
数组与指针示例
1 |
|
指针与二维数组
- 首地址:&a[0] [0]
- 使用指针访问二维数组中的元素
- *(a[1] + 2)
- *( *(a[1] + 2))
1 |
|