c语言指针进阶版

c语言指针进阶版,第1张

c语言指针进阶版 系列文章目录 1.字符指针 2.数组指针 3.指针数组 4.数组传参和指针传参 5.函数指针 6.函数指针数组 7指向函数指针数组的指针 8.回调函数 9.指针和数组面试题的解析


前言 为啥指针需要进阶那是因为指针是c语言的灵活它可以->变量/->结构体/->函数/->数组/->文件.非常灵活方便,因而写此文章提升能力。

一、字符指针

Example 1

int main()
{
	char ch = 'r';
	char* pc = &ch;
	printf("%c", *pc);
	return 0;
}
这边需要注意输出的时候*不能漏。

Example 2

 通过结果进行对比,让我们明白了数组str1与str2的地址不同。因此不一样,而str3与str4是取得字符串的地址因此一样。

二、指针数组

 强调:   类型 (*字母)[ ]    

  1. //解释:ar先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以ar一个指针,指向一个数组,叫数组指针。
  2. //这里要注意:[]的优先级要高于*号的,所以必须加上()来保证ar先和*结合

 Example 1:

*()是解引用将

指针pa中的地址解析出来。

  Example 2:

&数组名vs数组名

arr取出来的是数组名(首元素地址)

&arr取出的是首元素地址。

通过冒泡排序进行举例

  写法一

写法二指针写法。

  

挖掉parr3[10],剩下的就是这个数组里面的东西。  

三、数组指针

 

Parr就是数组arr的指针。 Parr是指针名去掉后就是指针类型  指向的是10个元素int类型。 


正常来说数组名是数组首元素的地址,但有两个例外:

1.sizeof(数组名)——数组名表示整个数组,计算的是整个数组的大小,单位是字节。

2.数组名——数组名表示整个数组,取出的是整个数组的地址。


四、数组传参和指针传参

一级指针传参。

二级指针传参。

五、函数指针与指针函数 函数指针

nt  (*) ()类型是函数指针

 2种写法。底下的写法是上面的简化版,由于函数名就是函数的入口地址,所以把&,*这个步骤省略。

 通过2个代码理解

 代码1:

里面那个void (*)()是函数指针类型。吧0强制转换为函数指针类型。(如果里面加p ,  void (*p)()就变成了函数指针变量了)这步 *** 作将0转化为函数的地址。由于无参所以void类型。然后将其括号起来加上解引用符*(void (*)())0在整体括号起来

(*(void (*)())0)();由于无参所以无法传参也是空着的。

代码2:

Signal是函数名signal后面()里面的是函数参数类型。

 这样看更好理解但是语法不支持

还可以这样简化。

 指针函数

是指返回指针的函数

六、函数指针数组


总结

未完待续明日搞

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5702465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存