指针操作一维数组和二维数组的理解!
- 一维数组
- 二维数组
一维数组
你虽然觉得指针操作一维数组很简单,但是通过做题发现并没有那么简单,特别是二维数组!!!
int main()
{
//创建一维数组
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int sz = sizeof(arr) / sizeof(int);
//一维数组在内存中是随着下标的增长,由低地址到
//高地址连续开辟空间来创建!
//那么凭借这一点只要由指针,在允许范围之内,可以随便操作内存
//数组名arr是里面存的是首元素的地址;
//创建的这个数组的每个元素是int
//那么,通过第一个字节的地址可以随便访问
//数组arr指向的就是第一个元素的类型
int* p = arr; //这儿arr被解析成了指针!!!
printf("*(p + 0) = %d\n", *(p + 0));
printf("p[0] = %d\n", p[0]);
printf("*******************\n");
printf("*(p + 1) = %d\n", *(p + 1));
printf("p[1] = %d\n", p[1]);
printf("*******************\n");
return 0;
}
二维数组
int main()
{
int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
//对于二维数组而言,arr即是数组名又是指向第一个元素的地址
//为什么这样?
//问一下,二维数组的大小怎么算?
//是不是sizeof(数组名) - 计算数组的大小!
//按道理讲,&arr,是整个数组的地址,本来就是这样的!!!
//那么arr?
//要怎么访问数据?
//对于以前的简单类型
int a = 10;
//打印数据,因为它只有一个数据
//所以,直接...
printf("%d\n", a);
//对于二维数据的设计是在访问数据中,把首元素的地址装进来arr,这样来访问,
//你可能一点也不习惯!
//二维数组的元素是一维数组
int(*pArr)[3] = arr; //arr是一维数组的地址
//就这样放问你了
printf("%d\n", (*pArr)[0]);
printf("%d\n", (*pArr)[1]);
printf("%d\n", (*pArr)[2]);
return 0;
}
完结!!!