回顾初级指针:http://t.csdn.cn/5tCSr (其中包含指针和指针数组) 接下来的内容是进阶新知识点哟 (^U^)ノ~YO
一.字符指针o(* ̄▽ ̄*)ブ
1.常量字符的指针。
对于常量字符以及常量字符串,其中若内容相同则会放到同一地址处,也就是当不同的指针变量指到相同的常量字符或常量字符串时指的是同一地址。
而对于字符变量则不同:
注意点:C语言下:对于常量字符要用' ' 对于字符串则用 ""。否则字符串那里回报错
二.数组指针≧◇≦(注意和指针数组的区分哟)
- 书写形式:数据类型+(*变量名)[列数]=&另一个变量名。
- 书写形式的解释:
int (*p)[10];p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。 注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。
3.应用:(一般应用于二维数组,一维数组一般是直接用普通指针变量)
(重要:当做二维数组使用时(*(p+j))[k]=p[j][k]),因为当取地址时*P代表首行后面的[]代表列(此行第几个)
(1).二维数组(整形和字符)
(2).一维数组(可用但是不提倡,直接用*p=arr它不香吗!?)
4.&数组名VS数组名 差异
三.小结练习p(^o^)q
- 一维数组传参判断:
- 二维数组传参判断:
- 一级指针,二级指针,使用传参场景:
- 注意点:指针和变量之间一定要相吻合(使用好强转)
例如int (*p)[10]=arr,强转:int (*p)[10]=(int (*)[10])arr;
四.函数指针Σ(っ °Д °;)っ
1.书写形式:数据类型+(*变量名)(参数,参数)=&函数名称。
当使用指针调用函数时有两个选择,一个是直接指针名另一种则是(*指针名)。
- 如何识别函数指针:(举例说明)
方法:将整分解开,再由内而外分析
1.void(* signal ( int, void(*) (int) ) ) (int);
该代码是一次函数的声明,声明的函数名字叫signal,
signal函数的参数有2个,第一个是int类型,第二个是函数指针类型,该函数指针能够指向的那个函数的参数是int,
返回类型是void
signal函数的返回类型是一个函数指针,该函数指针能够指向的那个函数的参数是int,返回类型是void
2.( *( void (*)() ) 0 )();
该代码是一次函数调用
调用0地址处的一个函数
首先代码中将0强制类型转换为类型为void (*)()的函数指针
然后去调用0地址处的函数
好了这就是今天的内容,明天继续写有关函数指针内容,谢谢大家观看?!!(●'◡'●)记得一键喲谢谢