章节结构
- 8.1 指针是什么
- 8.2 指针变量
- 8.2.1使用指针变量的一个例子
- 8.2.2 怎样定义指针变量
- 8.2.3 怎样引用指针变量
- 8.2.4 指针变量作为函数参数
8.1 指针是什么
“定指四 引三条”
地址指向变量单元。地址就被形象化的称为指针。意思就是通过指针就能找以它为地址的内存单元。
对于C语言来说,除了地址还要知道数据类型才能找到相应的内存单元。
存储单元的地址和存储单元的内容这两者的区别一定要弄清楚。 两种访问变量的方式:
- 直接访问:按变量名进行的访问
- 间接访问:即将变量的地址存放在另一变量中,然后通过访问另一变量来找到该变量的地址,从而访问该变量。
指向就是通过地址来体现的。
由于通过地址能够找到所需的变量单元。因此,可以说地址指向该变量单元。
指针变量:专门用来存放另一变量的地址(即指针)的变量
指针变量就是地址变量,用来存放地址,指针变量的值就是地址(即指针)
指针VS指针变量 可以说,变量i的指针是2000,但不能说i的指针变量是2000。
指针是一个地址,而指针变量是存放地址的变量。
8.2.2 指针变量
指针变量:存放地址的变量,它用来指向另一对象(如变量、数组、函数等)
8.2.2 怎样定义指针变量(4条)
定义指针变量的一般形式: 类型名 * 指针变量名
类型名在此处又可以称之为基类型。指针变量的基类型用来指定此指针变量可以指向的变量的类型。
在定义指针变量时要注意
- (1)指针变量前面的“ * ”表示该变量为指针类型变量。
- (2) 在定义指针变量时必须指定基类型
- 一个变量的指针的含义包括两个方面
- 以存储单元编号表示的纯地址(如编号2000的字节)
- 它指向的存储单元的数据类型(如int,char等)
- 一个变量的指针的含义包括两个方面
- (3)如何表示指针类型。指向整型数据的指针类型表示为
int *
,读作“指向int的指针”,简称“int指针” - (4) 指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量
8.2.3 怎样引用指针类型变量
在引用指针变量时,可能有3种情况
- (1)给指针变量赋值
int * p;p = &a //此处表明a为普通的int变量,p为int指针
- (2)引用指针变量指向的变量
printf("%d",*p)// 此处为解指针,得到的是指针p指向的变量的值
- (3)引用指针变量的值(是一个地址)
printf("%o",p);
&
取地址运算符。&a
是变量a的地址*
指针运算符(或称间接访问运算符),* p
代表指针变量p指向的对象- 星号
*
有两种含义,在定义时,表示类型,为指针类型。在其他地方时,则表示指针运算符
& 取指针运算符
8.2.4指针变量作为函数参数
函数参数不仅可以是整形、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。
不能企图通过改变指针形参的值而使指针参数的值改变
不能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指向变量的值。
这表示指针变量本身不能被改变,因为指针变量代表的是地址,因此指针变量的值是不可改变的左值;而指针变量所指向变量,是可以改变的,因此可以改变指针变量所指向变量的值。
void swap(int *p1,int *p2) // 这是想通过执行调用函数来改变指针变量本身的值,这是行不通的 { p = p1; p1 = p2; p2 = p; } `void swap1(int * p1,int *p2) // 通过调用函数改变实参指针变量所指向变量的值 { int temp; temp = *p1; *pt1 = * pt2; *pt2 = temp; }
int * p
指向p的指针
&a
变量a的地址
a = * p
; 指针变量p指向的对象