关于数组和指针的一些理解

int a = 3;
int * b = &a;
cout<<"b = "<<b<<endl;
cout<<"b+1 = "<<b+1<<endl;

b 是指向int类型a的一个指针。第一行输出打印出b指向数据的地址。第二行输出打印第一行输出的地址再加上4个字节。原因是:指针的加减操作,例如加一,则会在原来指向的数据地址基础上,加上所指数据所占的字节数,在例子中,所指的数据指的是int 类型,占4个字节,所以在原基础上增加4个字节。


了解了上述原理后,我们来看看下面这种情况。数组创建的方式有两种。第一种:

int * arr = new int[2] = {1,2};
cout<<"arr : "<<arr<<endl;
cout<<"arr+1:"<<arr+1<<endl;
arr是一个int类型的指针,指向了一个数组第一个元素的地址。由于arr是一个int类型的指针,因此arr+1的时候,在arr地址基础上加上4个字节,即可得到arr+1的值


第二种情况:

int arr[] = {1,2,3};
cout<<"arr : "<<arr<<endl;
cout<<"&arr : "<<&arr<<endl;
cout<<"arr+1 : "<<arr+1<<endl;
cout<<"&arr+1 : "<<&arr+1<<endl;

第一个输出,接受参数是一个数组,隐式转换成数组首地址。第二个输出&arr,这得到的是一个数组指针,类型为int (*)[3]。 第三个输出,按照上面的规则,arr转换成指向第一个元素地址的指针,也就是一个int指针,所以arr+1是在arr基础上加上了4个字节,指向数组第二个元素。 第四个输出。由于&arr是一个int (*)[3]类型的指针,所以&arr+1应该要在&arr的基础上加上一个个数为3个的int数组的长度。即 3*4 = 12 个字节。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值