数组指针&一维数组&二维数组ve
为什么需要数组指针 【数组指针实际上还是一个指针】
/* 说明:
数组指针实际上还是一个指针,所以它的存储空间 是一个固定的值
32位操作系统中为4,64位的操作系统中为 8 。
*/
//实际上在二维数组的函数传参中,接收的函数形参类型就是 数组指针!!!
- 方便模块化->也就是把数组的地址传入函数中,然后进行操作
- 方便查找,遍历...操作
- 实际上这个好处就和数组的好处一样,
- 利用指针一个可以省去很多不必要的内存空间
- 利用指针可以不必重复定义,省去的繁琐的操作
- 基于上述第二点可以进行模块化的操作,非常灵活!!!
#include <stdio.h>
int main(){
void ArrayTRA(int a[][4]);
int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };//二维数组初始化
ArrayTRA(a);
return 0;
}
void ArrayTRA(int a[][4]/*实际上在二维数组的函数传参中,接收的函数形参类型就是 数组指针!!!*/){
int (*p)[4] = a,i,j,count=0;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d ",*(*(p+i)+j)); //这里 【*(p+i)为行 +j 为列 】 在来一个* 为取值运算
if(++count%4==0)printf("\n");
}
}
}
数组指针&一维数组
//数组指针
#include <stdio.h>
int main(){
int a[10]={0};
int (*p)[10];
p=&a;
printf("%ox\n",p);// p 在上面存放了是&a的地址所以 为&a,a的地址
printf("%ox\n",*p); //这里*p 我理解为还是地址 ,是为了方面 *p+1来使用。 方便查找数组元素
printf("%ox",&a[1]);
return 0;
}
//数组指针的遍历元素
#include <stdio.h>
int main(){
int a[10]={0};
int (*p)[10],i;
p=&a;
for(i=0;i<10;i++)
printf("%-3d",*(*p+i));
return 0;
}
数组指针与二维数组
数组指针的初始化 &二维数组的指向
#include <stdio.h>
int main(){
int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };//二维数组初始化
int (*p)[4] = a,i,j; //实际指向的是 行为4列的指针,一维数组和二维数组都可
printf("%ox\n", *p+1); /*这里的*p实际上就是一个地址【这里的*p实际可以加*(p+1)表示第几行
指向的二维数组的第一行的第一个元素(默认)+1表示列 第几列元素*/
printf("%ox\n",&a[0][1]);
return 0;
}
printf("%ox\n", *(p+1));//这两个是等价的 *p指向行地址
printf("%ox\n",&a[1]);
二维数组中的等价关系
a+i == p+i
a[i] == p[i] == *(a+i) == *(p+i)
a[i][j] == p[i][j] == *(a[i]+j) == *(p[i]+j) == *(*(a+i)+j) == *(*(p+i)+j)
利用数组指针来进行二维数组的遍历
#include <stdio.h>
int main(){
int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };//二维数组初始化
int (*p)[4] = a,i,j,count=0;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d ",*(*(p+i)+j)); //这里 【*(p+i)为行 +j 为列 】 在来一个* 为取值运算
if(++count%4==0)printf("\n");
}
}
return 0;
}
指向二维数组的指针、
int a[2][3] ={1,2,3,4,5,6,7,8,9},*p ;
int m,s;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
s=p[1]+p[3]+p[5];//其实这里就是吧二维数组当成了一维数组来使用 !
数组的遍历
#include <stdio.h>
int main(){
int arr[3][4]={1,2,3,4,5,6,7,8},*p,i;
p=&arr[0][0];//把数组的首元素的地址赋值给 p
for(i=0;i<12;i++)
printf("%-3d ",p[i]);
return 0;
}
本文来自博客园,作者:Development_UP,转载请注明原文链接:https://www.cnblogs.com/develop-up/p/17205285.html