理解指针和数组的关系

int a[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12};//定义一个三行四列的矩阵


int *b;//定义一个指向int的指针
b=a[0];//将二维数组也就是矩阵的第一个位置地址给指针b。说明a[0]储存的就是个地址,a[0]是一个行指针a[0][0]的意思就是行指针a[0]的第一个元素。
cout<<*b<<endl;//输出值为1,说明b指向的地址存储的就是矩阵的第一个元素
cout<<b<<endl;//输出为0044fac8,为第一个值的地址,也就是行指针的起始位置。
cout<<a[0]+3<<endl;//进行的运算是指针的位置的向右移动三位,输出为0044fad4,输出的是第一行中第四个元素的地址。
cout<<*(a[0]+3)<<endl;//输出为4第一行第四个元素的值
cout<<*(b+3)<<endl;//输出为4,因为b为指针,指针加数字得到的是指针指向的偏移量,\
b+3代表的是从b指向的第一个位置向后移动三个位置。也就是第四个位置
cout<<*(b+4)<<endl;//代表从数组第一个存储位置开始向后移动四个位置,也就到了第五个位置。\
这时候输出的是5,这也就证明了一点,用指针指向二维数组的话,就是沿着从左到右边,\
从上到下的位置一个个来的。
for (int i=0;i<12;i++)
cout<<*(b+i)<<endl;//这个循环就是用来挨个输出数组的元素。

cout<<b+1<<endl;//输出的是右移一个储存单位的地址。和b的值对比的话要看数组的存储类型是什么,这里是int,是四个位。地址值相减值应该为4

int c=b+1-b;

int d=sizeof(b);//指针的大小,4,sizeof用来返回字节数。


cout<<"d="<<d<<endl;//输出的是整形的指针的大小,为4字节。
cout<<c<<endl;// 输出为1,指针之间的加减得到的是位置的差。


cout<<a[2]+1<<endl;//输出的是第三行第二个数的地址。
cout<<*(a[2]+1)<<endl;//输出的是第三行的第二个数值,也就是10


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值