c语言第四课(二级指针和二维数组)

文章讲述了回调函数的概念,即通过函数指针传递函数,实现函数的定制化。同时,介绍了几种常见的排序算法,如泡沫排序、选择排序和快速排序。此外,还讨论了递归的基本原理和效率问题。文中还探讨了二维数组、指针和二级指针的使用,以及数组指针在处理二维数组时的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回调函数(callback):把函数指针作为参数传入函数,使函数本身可以不知道该指针所致函数的具体功能,从而将函数的定制交给别人。

Rule(“hello”);          

(*Rule)(“hello”);  

 对于函数来说,函数的名字等于它的地址,所以两种形式都可以使用。

为什么用函数指针:

  1. 封装函数,防止重名,调用方便
  2. 回调函数,避免工作时,需要反复的做接口。

算法:

  1. 泡沫算法

for(int i=0;i<len-1;i++)

{

for(int j=0;j<len-i-1;j++)

{

  if(a[j]>a[j+1])

{swap(a[j],a[j+1]);    //swap为换位函数在这里就不打了,作用就是将两个数的值交换。

}

}

  1. 选择算法

for(int i=0;i<len;i++)

{

int min=i;

for(int j=0;j<len;j++)

{

if(a[min]>a[j])

  min=j;

}

int temp=a[i];

a[i]=a[min];

a[min]=temp;

}

  1. 插入排序

for(int i=1;i<len;i++)

{

int temp=a[i];

int j=i;

for(;j>0;j--)

{

if(a[j-1]>a[i])

{

    a[j]=a[j-1];

}

else

break;

}

a[j]=temp;

}

  1. 快速排序

void fastSort(int *a,int start,int end)

{

int left=start;

int right=end;

int temp=a[start];

while(left<right)

{

while(left<right&&a[right]>temp)

{

right--;

}

if(left<right)

{

a[left]=a[right];

left++;

}

while(left<right&&a[left]<temp)

{

left++;

}

if(left<right)

{

a[right]=a[left];

right--;

}

a[left]=temp;

fastSort(a,start,left-1);

fastSort(a,right+1,end);

}

}

递归:函数自己调用自己

  1. 要有终止条件。
  2. 知道递归的循环体是谁。
  3. 递归的运算速度算比较慢的

二维数组

a[2][3]=>[2]代表行,[3]代表列;

int a[2][3]={{1,2,3}{4,5,6}}与int a[2][3]={1,2,3,4,5,6}是等价的

a:表示二维数组的首行地址,步长为一行数组,在此为12字节

&a:整个二维数组的首个地址,步长为整个数组,在此为24字节

&a[0]:与a完全相等,表示二维数组的首行地址,步长为一行数组,在此为12字节

&a[0][0]:二维数组首行首元素的地址,步长为该元素的数据类型,在此为4字节

二级指针

int *ptr=&a

int**ptr2=&ptr;

ps:ptr2中存储的是ptr的地址

因为数组有边界,所以需要对指针进行限制

数组指针(int(*p)[3]=a;):指向一个固定长度的数组的指针,本身是一个二级指针

*a:表示数组首行首元素的地址

**a:表示首行首元素的值

*(*(a+1)+1):表示第二行第二个元素的值

ps:(a+1)表示第二行元素的地址    *(a+1)+1表示第二行第二个元素的地址

二维数组要配二级指针

*p=a:强行将二维数组给一维指针,(强行降维)计算机就会将其看成一维数组

指针数组(int* p[4]):数组里的每个元素都是指针,本身是一个数组

ptr[1]与*(ptr+1)是等价的

&s[0],&s[1]之间差一个指针的大小,即为8个字节。

字符串指针数组:特点:数组里的每一个数组指针都是连续的,它所指元素的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值