指针数组和数组指针

一:指针数组

首先,我们可以先类比一下,整型数组是用来存放整型的数组,字符数组是用来存放字符的数组,那指针数组就应该是存放指针的数组。

指针数组的每个元素都是地址,又可以指向一块区域

(1)指针数组模拟实现二维数组 

#include<stdio.h>
int main()
{
int arr1[]={1,2,3,4,5};
int arr2[]={2,3,4,5,6};
int arr3[]={3,4,5,6,7};
int *arr[3]={arr1,arr2,arr3};

int i=0;  int j=0;

for(i=0;i<3;i++)
{

      for(j=0;j<5;j++)
   {
       printf("%d ",arr[i][j]);
   }
  printf("\n");
}

return 0;

}

  代码运行的结果

实质为:

通过arr[i]来找到要访问的数组,然后用arr[i][j]就是用来访问arr i 的 j 下表的元素,

上述代码模拟出二维数组的效果,实际上并不是二维数组,因为3个数组并不是连续的,而二维数组则是连续的。

二:数组指针变量

同样类比,整型指针变量,字符指针变量,数组指针变量的实质是变量

整型指针变量: int * p 存放的是整型变量的地址,能够指向整型数据的指针。

浮点型指针变量:float* p 存放浮点型变量的地址,能够指向浮点型数据的指针。

首先来个易混淆判断:  下面那个是数组指针变量呢

 

int *p1[10];

int (*p2)[10];

当然是  int (*p2)[10]  啦;

解释:p先和*结合,说明p是一个指针变量,然后指向的是一个大小为10个整型的数组,综上,p是一个指针,指向一个数组,故其就是数组指针。因为[ ] 的优先级高于* 所以才用( )将* p 放在一起)

(1)数组指针的初始化

数组指针变量是用来存放数组的地址,那么只需要我们获得数组的地址就可以了。


int arr[10];

int (*p)[10]=&arr;
#include<stdio.h>
int main()
{

int arr[10]={1,2,3,4,5,6,7,8,9,0};
int (*p)=&arr;

int i=0;

    for(i=0;i<10;i++)
   {
    printf("%d ",p[i]);

   )

printf("\n");
  
   for(i=0;i<10;i++)
  {

     printf("%d",arr[i]);

   }
return 0;

}

通过代码运行的结果可以看出&arr和p的类型是完全一致的。

深度解析:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值