指针数组和行指针

1·、指针数组

指针数组中的一些关系比较多,下面对此做一点阐述,请看程序:

#include<iostream>
using namespace std;

int main()
{
    char* str[3]={"one","two","three"};
    char** p=str;
    cout<<p<<' '<<p+1<<' '<<p+2<<endl;//一个地址占4个字节
    cout<<*p<<' '<<*str<<endl;
    cout<<*(p+1)<<' '<<str[1]<<' '<<*str[1]<<endl;
    cout<<*str[0]<<' '<<*(*str)<<endl;
    cout<<*str<<' '<<*(*str)<<endl;
    cout<<*str+1<<' '<<*(*str+1)<<endl;
}

我们将这个指针数组看成三行,第一行为one,第二行为tow,第三行为three。

那么p、str指向的是第一行的首地址,*p、*str、str[0]输出的是第一行的字符串;

*(p+1)、*(str+1)、str[1]输出的就是第二行的字符串,依次可退(*p+2)、*(str+2)、str[2];

*(*p)、*(*str)、*str[0]是等价的,输出的都是第一行的第一个字母;

*(*p+1)、*(*str+1输出的都是第一行的第二个字符;*str[1]输出第二行第一个字符;

*p+1、*str+1输出第一行从第二个字符开始后所有字符;

如想输出第二行的第二个字母,可以这样*(*(p+1)+1)、*(*(str+1)+1)、*(str[1]+1);

所以p+1是地址加一,*p+1是元素加一;

2行指针,请看下面程序:

#include<iostream>
using namespace std;

int main()
{
 int a[2][2]={1,2,3,4};
 int (*p)[2];
 p=a;
 cout<<p<<' '<<*p<<endl;

 cout<<p+1<<' '<<*p+1<<endl;
 cout<<*(*p+1)<<endl;
 cout<<p+1<<endl;
 cout<<**p+1<<endl;
 cout<<*(*p+1)<<endl;
 cout<<a+1<<endl;
 cout<<*(*(a+1)+1)<<endl;
}
这里p是行指针,第一行元素是1、2,第二行元素是3、4,

p初始指向第一行地址,而*p指的是第一行第一个元素的地址

*p+1是第一行第二个元素地址,p+1是第二行地址;

以上是个人分析,如有错误请大家批评指正!!!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值