指针数组和数组指针的区别

#include <stdio.h>

int main()
{
	

char arry[3]={	'a',	'b',	'c'	};

char *p1[3];		//指针数组 : 指针p1[0], 指针p1[1], 指针p1[2] ;本身是数组,
					//数组里的每个元素的类型为指针,指向的数据类型为char型
					
char (*p2)[3];		//数组指针 : 本身是指针,指向char[3]数组的指针 ,数组里的数据类型为char型
					

p1[1] = arry;

p2 = &arry;

/* 这里的&arry并不是取arry这个变量本身的地址,这里arry代表的是数组本身

  • 因为p2 为指向char[3]数组的指针类型,而要对它进行赋值,也应给出相应的指向数组类型的指针

  • 而&arry在这就表示指向char[3]数组类型的指针,跟 printf(" arry = %p\n\r",&arry+1) 的情况相似
    */

    printf(" arry = %p\n\r",arry);
    printf(" &arry = %p\n\r",&arry);
    printf(" &arry+1 = %p\n\r",&arry+1);
    

    //这里的加1不是以sizeof(char)为单位的,而是以sizeof(arry),整个数组为单位进行加地址

     printf(" p2 = %p\n\r",p2);
     printf(" p1[1] = %p\n\r",p1[1]);
     printf(" p1 = %c\n\r",*(p1[1]+1));
     printf(" p2 = %c\n\r",*(*p2+1));
    
     **return 0;**
    }
    

输出:
在这里插入图片描述
由输出可以看出:&arry代表的是整个数组,数组的大小为3字节,而&arry+1=0x7fff1ca88f0+3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值