当前位置:   article > 正文

数组指针与指针数组_指针数组是什么意思

指针数组是什么意思

指针数组

1.什么是指针数组

        指针数组是一个数组,是用于存放指针的,即将指针(所指向的内存地址)作为数组元素的类型,存入的元素为变量或者是常量。

        指针数组存放的是很多指针的集合

2.定义一个指针数组

        格式:数据类型 *指针名 [数组大小]

        例:int *p[5]         长度为5的数组里面存放了5个类型为int* 类型的指针。(如果存入的是字符串常量,则为该常量对应的首地址)

这里可以看到,数组p中存放的是就是变量a、b、c的指针(即地址值),对其解引用当然也可以得到其相应的值。

 数组指针

1.什么是数组指针

                数组指针首先是一个指针,是一个指向数组的指针,可以存放数组的地址

那么什么是数组的地址呢?

        int arr[5]={1,2,3,4,5}

        arr-数组首元素的地址

        &arr[0]-数组首元素的地址

        &arr-数组的地址

即一个数组指针存放的是&arr的地址。

2.定义一个数组指针

        数据类型(*指针名)[数大小]

        例: int (*p)[5]   定义一个int类型的大小为5的数组指针

  1. int main() {
  2. int arr[5] = { 10,20,30,40,50 };
  3. int(*p)[5];
  4. p = &arr;
  5. printf("%p\n",arr);//arr首元素的地址值
  6. printf("%p\n",&arr[0]);//arr[0]的地址值
  7. printf("%p\n",arr[0]);//第一个元素10所对应的地址值
  8. printf("%p\n",p);//p指针的地址值,
  9. printf("%p\n",*p);//*p即arr本身的地址值
  10. printf("%p\n", *p[0]);//*p对应arr,*p[0]对应arr[0]第一个元素10的地址值
  11. printf("%d\n", (*p)[0]);//指针p第一个元素的值,即arr[0]的值
  12. int* pa;
  13. pa = &((*p)[0]);
  14. printf("%d",*pa);//用指针变量pa接收arr[0]的地址,在解引用验证是否正确
  15. return 0;
  16. }

指针p存放的是数组arr的地址,p就是数组指针。

数组指针例题:

编写程序,利用指向数组的指针求 3 * 5 数组各行元素之和。

  1. #include<stdio.h>
  2. #define N 3
  3. #define M 5
  4. int main()
  5. {
  6. int a[N][M];
  7. int (*p)[M] = a;
  8. int i,j,sum;
  9. /********** Begin *********/
  10. for(i=0;i<N;i++){
  11. sum=0;
  12. for(j=0;j<M;j++){
  13. scanf("%d ",*(p+i)+j);
  14. // printf("%d ",*(*(p+i)+j));
  15. sum+=*(*(p+i)+j);
  16. }
  17. printf("第%d行和为:%d\n",i,sum);
  18. }
  19. /********** End **********/
  20. return 0;
  21. }

测试输入:54 21 36 58 4 78 46 2 35 47 69 28 91 51 32

结果显示:

 指针数组例题:

编写程序,利用指针数组求 3 * 5 数组各行元素之和。

  1. #include<stdio.h>
  2. #define N 3
  3. #define M 5
  4. int main()
  5. {
  6. int a[N][M];
  7. int *p[N] ;
  8. int sum;
  9. for(i=0;i<N;i++)
  10. {
  11. for(p[i] = a[i] ; p[i] < a[i]+M ; p[i]++)
  12. {
  13. scanf("%d",p[i]);
  14. }
  15. }
  16. /********** Begin *********/
  17. for(i=0;i<N;i++)
  18. { sum=0;
  19. for(p[i] = a[i] ; p[i] < a[i]+M ; p[i]++)
  20. {
  21. // printf("%d ",*p[i]);
  22. sum+=*p[i];
  23. }
  24. printf("第%d行和为:%d\n",i,sum);
  25. }
  26. /********** End **********/
  27. return 0;
  28. }

测试输入:54 21 36 58 4 78 46 2 35 47 69 28 91 51 32

输出结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/223556
推荐阅读
相关标签
  

闽ICP备14008679号