一、多维数组元素的地址
1.a代表二维数组首元素的地址,此时的首元素指首行所有元素所成的组,即a+1代表第一行的首地址
2.a[0]代表a[0]行0列元素地址,即&a[0][0]
二、数组指针
1.指向数组的指针:比如int a[10],此时&a是指向数组长度为10的一维数组的指针,其基类型为int [10],占8 个字节
int *p[10]为指针数组,里面装了十个指针,size计算为80
int (*p)[10]为数组指针,P中只能装元素个数为10的一维数组的地址
二维数组:
指向函数的指针:函数的函数名,即为函数的入口地址
比如:
int add(int a,int b)
{
return a +b;
}
int main(void)
{
int (*pfn)(int a,int b) = NULL;
pfn = add;
return 0;
}
pfn指向add,int为指针的基类型(函数指针主要目的是为了降低程序耦合性)
qsort函数:快速排序
(数组首元素地址,数组元素个数,一个元素所占字节个数,描述比较大小关系,其返回值为int型)
三、指针数组和指向指针的指针
void getMem(char **p)
{
*p = malloc(100);
}
void fn(int *n)
{
*n += 10;
}
int main(void)
{
char *s;
getMem(&s);
strcpy(s,"Hello");
puts(s);
return 0;
}
若getMem(s)未取地址,则s为野指针,s的基类型为char *型,指针传参时,形参需要一个指针*P来接收,getMem函数中,char *为基类型,* 只是为了说明p 为指针
2.指针数组
当一个指针的数组作为实参传递时,对应的形参为指针的指针