接着搞指针。今天主要来讲几种字符指针变量。全程无尿点。
字符指针变量
字符指针变量就是类型指向字符的指针变量。
我们常用与右图图类似的代码来完成对字符指针变量的创建。但是左图的效果与之的相同的。这里很多人容易理解为将一个字符串放进了指针中,事实并非如此,其本质是将字符串的首元素的地址放进了指针变量里。这样写也是没问题的。
数组指针变量
这里首先要明白数组指针变量是指针变量,而不是数组。与字符指针变量相似,其里面存放的是数组的指针。那么这里有两种写法,int * a[10]与int (*a)[10],哪一种才是真正的数组指针呢?答案是后者,解释一下,前者*与int结合,表示形成了整型指针,在和a[10]结合,表示的是整型指针数组(上一讲讲过啦);后者int (*a)[10],我们要知道优先级()>[]>*,那么这里*与a先结合代表a是个指针变量再和int与[]结合,形成数组指针变量。接下来我们来初始化一下。
pa是指针变量名,int表示指针指向数组的元素类型,[10]表示指针指向的数组里面有10个元素。然后这里一定要写&arr1而不是arr或者&arr[0],因为后两者表示的都是数组中的第一个元素,而不代表整个数组。(具体的区别在上一节讲过)
函数指针变量
函数指针变量同样也是指针变量,这个指针变量指向函数的地址。
无论什么变量都应该先搞清楚它是如何初始化的。 int指函数add的返回值,与数组指针变量类似(*ad)不是指解引用,这里指ad是个指针变量,(int,int)是指针所指向的函数参数类型。那么这样就初始化完成了。
接着我们给出了利用函数指针来调用函数,需要明白的是printf函数里ad前有无*效果是一样的。
到此为止,我们已经学过了,整型指针变量,字符指针变量,数组指针变量,函数指针变量,那么容易想到,指针是不是可以指向内存中的任意对象?没错,是这样的。
用typedef简化指针变量类型名称
学习整型指针变量和字符型指针变量时还好,当我们学数组指针变量和函数指针变量时,不由得会感觉初始化一个指针变量都挺复杂,那么有没有什么方法来简化一下呢,哎,你还别说,还真有。人们定义了一个typedef关键字来方便代码的编写。具体使用方法如下。
上面给出了几种使用typedef来简化代码的例子。这里需要注意在简化数组指针变量类型和函数指针变量类型时新的名字需要紧跟在*后面。
函数指针数组
上一讲我们学习了指针数组,接下来我们来讲讲函数指针数组,就是将函数指针放进数组里面。
上面代码92行给出了函数指针数组的初始化,咋一看感觉好复杂。我来娓娓道来。
看看整型指针数组int* arr[],字符型指针数组char* arr[],发现都是类型+名称+[]。那么函数指针数组同样如此,但是名称+[]要跟着*,[]里面同样填数组里面有几个元素,就是这样了。
今天的分享就到此为止了,感谢观看。下期再见。