前言 为啥指针需要进阶那是因为指针是c语言的灵活它可以->变量/->结构体/->函数/->数组/->文件.非常灵活方便,因而写此文章提升能力。
一、字符指针
Example 1
int main() { char ch = 'r'; char* pc = &ch; printf("%c", *pc); return 0; }这边需要注意输出的时候*不能漏。
Example 2
通过结果进行对比,让我们明白了数组str1与str2的地址不同。因此不一样,而str3与str4是取得字符串的地址因此一样。
二、指针数组强调: 类型 (*字母)[ ]
- //解释:ar先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以ar一个指针,指向一个数组,叫数组指针。
- //这里要注意:[]的优先级要高于*号的,所以必须加上()来保证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后面()里面的是函数参数类型。
这样看更好理解但是语法不支持
还可以这样简化。
指针函数是指返回指针的函数
六、函数指针数组总结
未完待续明日搞
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)