一、二维数组与指针
1、int a[ 3] [4] = {1,2,3,4,5,6,7,8,9,0};
a[0]和*(a+0)等价,a[1]和*(a+1)等价,a[i]和*(a+i)等价。因此,a[0]+1和*(a+0)+1都是&a[0][1]。a[1]+2和*(a+1)+2的值都是&a[1][2]。不能将*(a+1)+2错写成*(a+1+2),后者变成*(a十3)了,相当于a[3]。
*(a[0]+1)就是a[0][1]的值。*(*(a+0)+1)或*(* a+1)也是a[0][1]的值。*(a[i]+j)或*(*(a+i)+j)是a[i][j]的值。
打印函数:
int (*p)[10];p = &a;定义一个指针指向数组a的首地址。
int *p[10]指针数组,里面装的10个指针,sizeof为80.
二、指向函数的指针
回调函数:
函数的函数名 (div3),即为函数的入口地址;降低程序的耦合性。
qsort调用:#<stdlib.h>
qsort(首元素地址,长度(数组元素个数),每个字符占的大小,函数名(返回值类型));
void万能类型。
三、指向指针的指针
修改变量里面的值,传递的是修改变量的地址。
若getMem(s)未取地址,则s为野指针,s的基类型为char*型,指针传参时,形参需要一个指针*p来接受,getMem函数中,char*为基类型,*只是为了说明p为一个指针。
一个指针数组作为实参进行传递,形参的形式是指针的指针。**s == *s[]。
字符数组由多个字符串组成,字符指针变量中存放的是地址(字符串第1个字符的地址),不是将字符串放到字符指针变量中。当一个指针的数组作为实参传递时,对应的形参为指针的指针。
指针的指针实现排序: