C语言知识补充之指针
#这只是身为我结合书本的个人的理解,肯定有很多错的地方,请勿喷
指针——C语言的灵魂
1. 指针概述
“指针”就是内存地址,使用指针访问变量,就是直接对该内存中的数据进行的操作。相比于之前学习的知识,合理使用指针可以有效提高程序运行的速度和灵活性。
2. 指针变量概述
(1)定义:
专门用来存放另一个变量地址的变量,称为指针变量
(2)有关的运算符
取地址运算符:&。如&m,返回变量m的地址。
取值运算符:*。如*m,访问指针变量m指向的地址上的内容
(3)指针变量的定义,如:
int *p; //定义了一个指针变量p,p只能存放整型变量的地址。
(4)指针变量的赋值,如:
p=&i; //将i的地址赋给指针变量p
p=p+m; //p的值=i的地址+i的数据类型字节×m
(5)指针变量实际使用情况:
访问内存中的数据由两种方法,直接访问和间接访问。直接访问就是之前的通过变量名直接访问,间接访问就是通过指针访问。实际上对单个变量使用指针没有任何意义,对数组、字符串等使用才有更大的意义。
3. 指针变量与函数
关键点:既然指针变量本质上也是变量,那么也可以指向函数或者作为函数的返回值使用
(1)函数指针
定义:函数指针就是一个指向函数(存放函数地址)的指针。每个函数在编译时,会被分配一个入口地址,一般函数名就是该入口地址。
指向函数的指针变量的定义:函数类型 (*指针变量)([形参]),如:
int (*p)(int x,int y) //说明p可以用来指向参数形式是(int,int)的函数
使用格式:指针变量=函数名。如:
p=max; //p指向函数max(int,int)
(*p)(a,b); //相当于使用了max(a,b)
(2)指针函数
定义:指针函数就是函数的放回值是指针。
此类函数定义格式:如:类型 *函数名([形参]){函数体},如int *max(int *a,int *b);
注意:形参是实参的拷贝,仅在函数内部改变形参的值,并不会影响到实参的值。
实际使用情况:理解使用malloc()申请内存的时候会用到。
4. 指针与数组
关键点:数组在内存中连续存储的性质。
(1)一维数组中数组名就是首地址。例如a[10],a就是该数组首地址,也就a[0]的地址。
(2)二维数组中,如a[10][10],a就是a[0][0]的地址,a[8]就是a[8][0]的地址,a[9]就是a[9][0]的地址
(3)利用指针引用数组可以采用偏移量引用,如:
int a[10];
int *p=a;
for(i=0;i<10;i++)
scanf("%d",p+i);
(4)函数中实参如果为数组,则传递给函数的形参只写数组名即可。
(5)数组也有指针,如int *a[10],则10个元素均为指针变量。
5. 指针与字符串
关键点:字符串也是数组,使用方法和数组一样。

浙公网安备 33010602011771号