数据结构 指针知识

来源:互联网 发布:java实训日志 编辑:程序博客网 时间:2024/06/05 03:28

int *p其实是一个指针变量,该指针变量只能存储int类型的数据的地址。


知识点归纳: 
1.指针与指针变量的概念。 
(1)指针:就是内存中的一个存储单元的地址,即内存单元的编号。 
(2)指针变量:是一个能存放地址值的变量。通过它存放的地址值能间接访问它所指向的变量。 2.指针变量的定义。 类型名  *指针变量名 
类型说明中可取C语言的有效类型,* 表示为指针型变量。如: char  *c1,*c2; 
表示c1与c2是指针变量,其基类型是字符型。 注意:指针的基类型与其所指向的变量的类型要统一。 3.指针变量的使用方法 
(1)使指针变量指向某个变量,(即将某变量的地址值赋给指针变量)例: int x;  int *p=&x;  或    int x ,*p;   p=&x  (2)用间址运算(运算符为*)访问所指变量,例: *p=5;//用作左值时代表所指的变量 x=*p+9;//用作右值时代表所指变量的值 
注意:指针变量在使用之前一定要指向某变量,而不能用常数直接赋值 4.指针运算的优先级与结合性(主要涉及*、&、++、- -)。 单目运算符优先级是相同的,但从右向左结合。 重点理解: 
(1)*&a等同于a; &*p等同于&a。 (2)*p++等同于*(p++) (3)*++p等同于*(++p)  
(4)(*p)++与*(p++)的区别。(*p)++是变量值增值,相当于a++;而*(p++)则是用完当前值后,指针值增值,即相当于a, p++,是指向了新的地址。 5.指针与一维数组(整型数组) 
(1)数组的地址:即数组中首个元素a[0]的地址。 
(2)数组地址的表示方法: (1)用数组名a,(2)取首元素的地址,即&a[0] (3)数组指针:指向数组的指针变量的简称,即指针变量中存放的是某数组的首地址。例, 
若有 int  a[10],*p;p=&a;则可称p为a数组的指针,或称p指向数组a。 (4)指针与数组的关系:通过移动指针使其指向不同的数组元素 
p,(p+1),(p+2),„,(p+9) 等同于 &a[0],&a[1],&a[2],„,&a[9]。 *p,*(p+1),*(p+2),„,*(p+9) 等同于a[0],a[1],a[2],„,a[9]。 (5)总结:一维数组元素的合法引用方式 方式一,数组名[下标], 例如 a[0],a[1],„ 方式二,指针名[下标],例如 p[0],p[1],„ 
方式三,*(指针名+下标),例如 *p,*(p+0),*(p+1),„ 方式四,*(数组名+下标),例如 *a,*(a+0),*(a+1),„ 
(在C中,数组名就是第一个元素的地址,因此对数组的引用可以直接用*a表示a[0],用*(a+1)表示a[1],用*(a+2)表示a[2],„,用*(a+9)表示a[9]。) 




9.指针数组与指向一维数组的指针变量 
(1)指针数组:一个数组,它的元素都为指针类型。 定义方式为:类型说明  *数组名[整型常量表达式] 
如:char  *s[4];则定义了一个指针数组,即s[0],s[1],s[2],s[3]均用来存放地址值,主要用于处理多个字符串。 
(2)指向一维数组的指针:一个指针,指向一个一维数组 定义形式是:类型说明  (*变量)[整型常量表达式] 
如:int (*p)[4];定义p为指针变量,它指向的是一个具有四个元素的一维数组。 


10.指向指针的指针 
指向指针的指针也就是“二级指针”。 定义方式如下:类型说明  **指针变量名 
即定义一个二级指针变量,类型说明是它指向的指针变量所指向的变量的数据类型。它所指向的指针变量称为一级指针变量。 赋值形式为:二级指针变量=&一级指针变量; 
这类似于张三有李四的地址,而王五有张三的地址,这样王五通过张三找到李四。这样张三是一级指针,而王五是二级指针。 例如: 
#include <stdio.h> void  main() 
{char *name[]={ "Follow me","BASIC","Great Wall″, 
"FORTRAN","Computer design"}; 
    char **p;int i;     for(i=0;i<5;i++) 
   { p=name+i; printf(″%s\n″,*p);}   }

0 0
原创粉丝点击