直接上代码,观察结果:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int Number [5]={10,20,30,40,50};
int *p=Number;
/*说明:数组正常遍历
*/
cout<<endl<<"-------A-------- Number[i]---------------"<<endl;
for (int i = 0; i < 5; ++i)
{
cout<<(Number[i])<<endl;
}
/*说明:数组名是一个常量指针,指向数组的第一个元素
Number是一个指向Number数组的第一个元素的指针(也即是一个地址);
对Number进行加减运算,如Nuber+i(指向的是Number中的第i个对象,不是离Number开头的i字节处),也即Number首地址+i*(sizeof(int))
*/
cout<<endl<<"-------B-------- Number+i---------------"<<endl;
for (int i = 0; i < 5; ++i)
{
cout<<(Number+i)<<endl;
}
/*
说明:*(p+i) : 取第(p+i*(sizeof(int))地址处元素的值
*/
cout<<endl<<"-------C-------- *(p+i)---------------"<<endl;
for (int i = 0; i < 5; ++i)
{
cout<<*(p+i)<<endl;
}
/*
说明:*p+i : 指针p指向地址处的值+i
*/
cout<<endl<<"-------D-------- *p+i---------------"<<endl;
for (int i = 0; i < 5; ++i)
{
cout<<*p+i<<endl;
}
/*
说明:数组名用作常来指针是合法的,常量指针用作数组名也是合法的
*/
cout<<endl<<"-------E-------- p[i]---------------"<<endl;
for (int i = 0; i < 5; ++i)
{
cout<<p[i]<<endl;
}
/*
*p++是先取出*p的值,然后让p++
(*p)++是先取出*p的值,让这个值++
*(P++)是先取出*p的值,让p++
所以,*p++等价于*(P++)
*/
// cout<<endl<<"-------F-------- *(p++)---------------"<<endl;
// for (int i = 0; i < 5; ++i)
// {
// cout<<*(p++)<<endl;
// }
// cout<<endl<<"-------G-------- *p++---------------"<<endl;
// for (int i = 0; i < 5; ++i)
// {
// cout<<*p++<<endl;
// }
// cout<<endl<<"-------H-------- (*p)++---------------"<<endl;
// for (int i = 0; i < 5; ++i)
// {
// cout<<(*p)++<<endl;
// }
return 0;
}
打印结果如下:
如果要查看FGH的结果,只能是将F/G/H之一注释去掉,即一次只能查看FGH之一的结果。