C语言指针速成下篇

c语言的指针下篇终于迎来了收尾,那么废话不多说,我们直接进入正题

 指针访问数组

# include <stdio.h>
int main ()
{
int arr[ 10 ] = { 0 };
// 输⼊
int i = 0 ;
int sz = sizeof (arr)/ sizeof (arr[ 0 ]);
// 输⼊
int * p = arr  //这一步往下都是指针访问数组
for (i= 0 ; i<sz; i++)
{
scanf ( "%d" , p+i);
//scanf("%d", arr+i);// 也可以这样写
}
// 输出
for (i= 0 ; i<sz; i++)
{
printf ( "%d " , p[i]);
}
return 0 ;
}
语法格式:类型* 指针变量名  =  数组名

函数传参方面

函数的形参(数组)格式:

1.int   数组名[ ] 

2.int*   指针变量名

二级指针的底层逻辑

一级指针:

int*  p  =  &a;

二级指针:

在一级指针的基础上,将一级指针的地址,再次存放进指针变量中。

格式:int* pp = p   或  int** pp = p 或int**pp = *p

那么我们来看道题:

可能刚学习到指针的小伙伴会疑惑,什么是节点呀?这不是在为难我吗。既然不知道节点是什么没关系,但是实参和形参是什么,小伙伴们应该都知道吧,指针刚好又是这节课学的,所以嘛,我们还是可以试试的。

首先我们先讲一下实参这边:  &plist是这个这个变量名(节点)的地址,因为有个&符号,也就是我们上面写的int*  p  =  &a;

那么我们再来看看pilst以及它对应的*pphead如何理解 

首先我们根据之前学的一级指针基础可以发现:2 、3两个是可以互逆的,也就是说&plist的地址给了形参pphead,并且pphead给它“封装”了起来,然后当pphead需要通过地址找到这个变量时,给自己的前面加个星号,以此打开之前自己“封装”好的地址”包裹“,然后根据地址找到之前的变量,看到这里的小伙伴应该已经知道这操作的名字了,没错这就是解引用

那么前两层理解了后最后一层就容易理解了

实参这列的最后一个*plist它是一个一级指针,因此形参这边需要用二级指针来保存实参

看到这里的小伙伴如果还不理解,可以再思考一遍,或者在评论区留言。

那么最后给大家简单介绍一个排序函数

qsort函数

作用:进行数据排序

使用前提条件:排序的数据必须是整型数据

qsort函数的使用模板: 

int compare(const void* a, const void* b)

{
    return(*(int*)a - *(int*)b);

}

qsort(数组名,数组长度,类型字节,compare);

今天的指针篇到此就完结了,大家看完后,可以做一下笔记。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值