一维数组和二维数组和指针的关系、数组指针的定义方法及使用方法。
#include <stdio.h>
/***
而对于一维数组来讲,它与指针相结合的话,对地址来讲,有以下关系。
eg:int a[i];
1. 数组地址 数组首元素地址
&a a
对于二维数组来讲,它与指针相结合的话,对地址来讲,有以下关系。
数组指针的表达式
eg: int (*p)[j]; //
eg:int a[i][j];
1. 数组地址 数组首行地址 数组首元素地址
&a a *a
2. 数组任意行首元素地址的表达方式
a[i] *(a+i)
3. 数组任意行地址的表达方式
&a[i] a+i
4. 数组任意元素地址的表达方式
&a[i][j] a[i]+j *(a+i)+j
5. 数组任意元素的表达方式
a[i][j] *(a[i]+j) *(*(a+i)+j)
6. **a代表的就是数组首元素
***/
int main(void){
int a[2][4] = {{1,2,3,4},{5,6,7,8}};
int b[4] = {4,9,2,7};
//下面定义的p1和p2是数组指针,指向的是一个含有4个元素的一维数组的地址
//对于一维数组来讲,数组名字代表的是该数组第一个元素的地址,而对于二维数组来讲,数组名字代表的就是第一行数组的地址、
int (*p1)[4];
int (*p2)[4];
int *p3; //
p1 = a;
p2 = &b; //在一维数组当中,数组名代表的是首元素的地址值,而该一维数组的地址值应用&b来表示。
p3 = b; //由于p3是(int *)型的指针变量,所以与一维数组的数组名所代表的指针变量类型一样。
p3 = *a; //同理对于二维数组来讲,*a的指针变量类型与p3相同。
printf("%d",*b);
printf("\r\r\n");
printf("%d",*(*(p1+1)+3));
return 0;
}