章节结构
- 8.1 指针是什么
- 8.2 指针变量
- 8.2.1使用指针变量的一个例子
- 8.2.2 怎样定义指针变量
- 8.2.3 怎样引用指针变量
- 8.2.4 指针变量做为函数参数
8.1 指针是什么
“定指四 引三条”
地址指向变量单元。地址就被形象化的称为指针。意思就是经过指针就能找以它为地址的内存单元。
对于C语言来讲,除了地址还要知道数据类型才能找到相应的内存单元。数组
存储单元的地址和存储单元的内容这二者的区别必定要弄清楚。 两种访问变量的方式:函数
- 直接访问:按变量名进行的访问
- 间接访问:即将变量的地址存放在另外一变量中,而后经过访问另外一变量来找到该变量的地址,从而访问该变量。
指向就是经过地址来体现的。指针
因为经过地址可以找到所需的变量单元。所以,能够说地址指向该变量单元。code
指针变量:专门用来存放另外一变量的地址(即指针)的变量对象
指针变量就是地址变量,用来存放地址,指针变量的值就是地址(即指针)内存
指针VS指针变量 能够说,变量i的指针是2000,但不能说i的指针变量是2000。
指针是一个地址,而指针变量是存放地址的变量。class
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指向的对象