1.访问方式:
-
直接访问(通过变量直接访问)
-
间接访问(将变量a的地址保存在变量b中,通过变量b来访问变量a的地址,最终访问到变量a)
2.指针变量
-
指针是一个地址,指针变量就是地址变量,用于存放地址,指针变量的值是地址(即指针)。
-
定义方式:
类型名 *指针变量名;
-
指针变量赋值
-
给指针变量赋值。
p = &a;
-
引用指针变量所指的变量。
a = 10; *p = a; printf("%d",*p);//输出的是10
-
引用指针变量的值。
*p = a; printf("%d",p);//输出的是地址
-
-
指针变量最为函数参数
-
作为一个变量的地址传递到另一个函数中。
int function(int *p); //函数调用时 n = function(&a);
-
3.通过指针引用数组。
-
数组元素的指针
//指针p指向数组首元素的地址。 int a[10]; int *p; p = &a[0];
-
在引用数组元素时指针的运算
-
指针指向数组元素时,可以对指针进行加减运算。
-
指针变量的加减
p +(-) 1;//表示加上(减去)一个数组元素所占用的字节数 int a; int *p; a = 10; *p = a; printf("%d",p);//10255024 printf("%d",p-1)//10255020
-
-
如果p的初值为&a[0],则p + i 和 a + i是数组a[i]的地址
int a[10]={1,3,6,4,8,9}; int *p; p = &a[0]; printf("%d",(p+3));//6422012 printf("%d\n",(a+4));//6422016
-
指针变量p1和p2都指向同一数组,p2-p1的值是地址值之差除以数组元素的的长度。
int a[10]={1,3,6,4,8,9}; int *p1,*p2; p1 = &a[0]; p2 = &a[4]; printf("%d\n",p1);//6421984 printf("%d\n",p2);//6422000 printf("%d\n",p2-p1);//4 double a[10]={1.0,3.0,6.0,4.0,8.0,9.0}; double *p1,*p2; p1 = &a[0]; p2 = &a[4]; printf("%d\n",p1);//6421936 printf("%d\n",p2);//6421968 printf("%d\n",p2-p1);//4
-
-
通过指针引用数组元素
-
下标法
-
指针法
int a[10]={1,3,6,4,8,9}; int *p; p = &a[0]; printf("%d\n",*(p+3));//4 printf("%d\n",*(a+4));//8
-
-
数组名作函数参数
-
数组名做参数时,实参数组名将数组首元素地址传递给形参。
-
变量名与数组名做函数参数的比较
实参类型
变量名
数组名
形参的类型
变量名
数组名或者指针变量
传递的信息
变量的值
实参数组首元素的地址
通过函数调用是否能改变实参的值
不能改变实参变量的值
能改变实参数组的值
-
-
通过指针引用多维数组
-
多维数组元素的地址。
int a[3][4] = {{1,3,5,7},{2,4,6,8},{9,10,11,0}};
a(a+0)代表的是首行(第0行),a+1是第1行.
表示形式
含义
a
二维数组名,指向一维数组a[0],即0行首地址
a[0], (a+0), a
0行0列元素地址
a+1, &a[1]
1行首地址
a[1], *(a+1)
1行0列元素a[1] [0]的地址
a[1]+2, *(a+1)+2, &a[1] [2]
1行2列元素a[1] [2]的地址
(a[1]+2), (*(a+1)+2), a[1] [2]
1行2列元素a[1] [2]的值
-
指向多维数组元素的指针变量。
-
指向数组元素的指针变量
p = a[0];//p指向第0行的首列元素。 p + 11 == a[2][3];// a[2][3]为数组的第11个元素(从0开始计数)
-
指向有m个元素组成的一维数组的指针变量
如果p = &a[0];则p + 1指向a[1],p + 2指向a[2],p的值的变化是以一维数组的长度(按行)为单位。
-
-