C++中指针的算术运算的问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 22:19:49
#include <iostream.h>
void main()
{
int a[5]={1,2,3,4,5};
int *pa,*pb;
//pa=&a[0];//*pa=a[0]=1
pa=a;
pb=&a[4];
cout<<"*pa="<<*pa<<endl;
cout<<"*pb="<<*pb<<endl;
pa=pa+2; //指针与整数的相加运算
cout<<"pa+1="<<*pa<<endl;
pa=pa++; //指针加1运算
cout<<"pa++="<<*pa<<endl;
int c=pb-pa; //指针的相减运算
cout<<"pb-pa="<<c<<endl;
}

第一个问题是第七行pa=a为什么代表pa=&a[0]
第二个问题是第十一行是pa=pa+2为什么到下一行就是输出pa+1=了,与指针的字节有关吗还是程序错了?

第一个问题,
pa=a,是把数组a 的起始地址赋值给pa,数组a 的起始地址就是首元素a[0]的地址,所以pa=a与pa=&a[0]等同。

第二个问题,
应该是书上印错了。

因为pa是指针。a是数组默认a为第一个元素的地址。
他输出的本来就是第三个元素啊,没问题。开始输出的是1,第一个元素。只是你自己在写12行的时候写成pa+1了,应该是pa+2

数组名称就是指向数组第一个位置的指针,所以pa=a代表pa=&a[0]
第二个问题貌似是程序错了,我运行了输出是3是pa+2