直接上代码,观察结果:
#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之一的结果。