最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

每日看点!数组指针&一维数组&二维数组ve

来源:博客园


(资料图片仅供参考)

为什么需要数组指针 【数组指针实际上还是一个指针】

/* 说明:数组指针实际上还是一个指针,所以它的存储空间 是一个固定的值32位操作系统中为4,64位的操作系统中为 8 。

*///实际上在二维数组的函数传参中,接收的函数形参类型就是 数组指针!!!

  1. 方便模块化->也就是把数组的地址传入函数中,然后进行操作
  2. 方便查找,遍历...操作
  3. 实际上这个好处就和数组的好处一样,
    1. 利用指针一个可以省去很多不必要的内存空间
    2. 利用指针可以不必重复定义,省去的繁琐的操作
    3. 基于上述第二点可以进行模块化的操作,非常灵活!!!
#include 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 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 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 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+ia[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 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 int main(){    int arr[3][4]={1,2,3,4,5,6,7,8},*p,i;p=&arr[0][0];//把数组的首元素的地址赋值给 pfor(i=0;i<12;i++)printf("%-3d ",p[i]);    return 0;}

关键词: