c语言进阶(2)——指针进阶

本文介绍了C语言中关于指针的一些关键概念,包括字符指针用于存储字符串的方式,其中常量字符串不可修改;指针数组是由相同类型指针组成的集合;数组指针是一个指向整个数组的指针,尤其在处理二维数组时的应用;以及函数指针和函数指针数组的概念,它们在代码中起到传递行为的作用,允许函数调用其他函数。此外,还提到了回调函数的概念,即通过函数指针调用的函数,通常用于特定事件的响应。
摘要由CSDN通过智能技术生成

1.字符指针

(1)字符串可以用数组来存储,或字符指针来存储;对于字符串的使用,只需要知道首个字符的地址和结束标志‘/0’。
(2)用数组来存储的字符串,是变量字符串,字符串中的字符是可以修改的。
(3)用字符指针来存储的字符串,是常量字符串,字符串中的字符是不可以修改的。
(4)在使用字符指针来存储字符串的时候,最好加上const使得代码更加健壮。例如:const char * str=“abcd”;
(5)字符指针是指向常量字符串的首地址。
(6)const char *str1 =“abcd”;const char *str2=“abcd”;表达式str1= =str2的值为真;因为常量的字符串在内存中只需开辟一个空间,首元素的地址不变;
所以字符指针指向的空间是相同的。
(7)char str3[]=“abcd”;char str4[]=“abcd”;表达式str3= =str的值为假;因为这是两个不同的数组,分别在内存中开辟不同的两个内存空间,此时首元素的地址便不再相同。

2.指针数组

(1)指针数组重点在数组——是用多个相同类型指针组成的一个集合。

3.数组指针

(1)数组指针中在指针——是一个指向整个数组的指针。
(2)数组指针的定义:如:int a[5]; int (*pi)[5]=&a ;
(3)&数组名VS数组名:int a[5];
a. 数组名是指向首元素的地址,如:数组a指向首元素a[0]的地址,是int *类型。
b. &数组名是指向整个数组的指针,地址是首元素的地址,是 int * [5]型。
c. 虽然都是指向首元素的地址,但是+1的步长不一样。
(4)数组指针一般用在二位数组上,是指向一行的行指针。

4.数组参数、指针参数

(1)一级指针做函数参量,可用一维数组名a、一级指针、数据的地址。
(2)二级指针做函数参量,可用指针数组的数组名、一级指针的地址、二级指针。

5.函数指针

(1)函数指针的定义
例如:有函数int fun(int x,int y);函数指针定义为int (*fp)(int ,int)=&fun;
(2)函数名和&函数名都是函数的地址。

6.函数指针数组

(1)把函数的地址存到一个数组中,这个数组叫做函数指针数组。
(2)函数指针数组的定义:int (*parr1[10])();parr1先和[10]结合,说明这是个数组,数组里面的类型是int ( * ) ( )函数类型的函数指针。
(3)函数指针数组的作用是:转移表,将参数类型相同,返回值相同的函数放到同一个数组中。
如,计算机中的加减乘除,利用转移表,可大量减少重复代码的出现。

7.指向函数指针数组的指针

(1)指向函数数组的的指针是一个指针;指针指向的是一个数组,数组的元素都是函数指针。
(2)定义:

函数:void text(const char * str)
{};
函数指针:void (*pf)(const char *)=text;
函数指针的数组:void (*pfunArr[5])(const char *)={NULL};
指向函数指针的数组:void ( * (*pffun)[5])(const char *)=&pfunArr;

8.回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指函数是,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另一方调用的,用于对该事件或条件进行响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰深入学习计算机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值