指针与const,指针与数组
什么是常量指针和指针常量
常量指针是指const来修饰定义一个指针,而指针常量则是定义一个const修饰的指针。
代码示例:
#include
using namespace std;
int main(){
int a1=1,a2=2,b1=3,b2=4;
//常量指针
const int *pb=&b1;
cout<<"pb="< pw = pw + 1; cout << "pw="<< pw << " *pw=" << *pw << endl; cout <<"wages字节大小:"<< sizeof(wages)< cout <<"wages[0]字节大小:"<< sizeof(wages[0])< cout << "wages[0]="< cout << "*(wages+1)="<<*(wages+1)< cout << "sizeod(*pw)="<< sizeof(*pw)< cout < cout << "ps=" << ps << " *ps=" <<*ps< ps = ps + 1; cout << "ps=" << ps << " *ps=" <<*ps< cout <<"stacks字节大小:"< return 0; } 运行结果为: pw=0x7ffc39e93580 *pw=1000 pw=0x7ffc39e93588 *pw=2000 wages字节大小:24 wages[0]字节大小:8 wages[0]=1000 wages[1]=2000 *(wages+1)=2000 sizeod(*pw)=8 ps=0x7ffc39e9357a *ps=3 ps=0x7ffc39e9357c *ps=2 stacks字节大小:6 定义指针指向一个数组时,一般情况都是指向数组的第一个元素的地址。 wage[0],wage[1]的地址是紧接着的相隔8个字节,stacks是相隔的2字节,指针运算,当使用pw+1时,指针加1,它的值由于是指向double类型,所以它的值加8(可见第一、二行输出的pw的值作为印证)。short类型的指针加1,则其值加2。 归类可知:增加的值为其指向的数据类型所占字节数。 wages[1]和*(wages+1)的值是一样的,由于wages是指向wages[]第一个元素的指针地址,那么wages+1就是相当于pw+1,在进行解引,得到的就是wages[1]的值2000,意味着的是先找到第二个元素的地址再取值。 由此可知,在很多情况下,可以用相同的方式使用数组名和指针。但他们之间也是有区别的。 int a[]={1, 2, 3}; int *pa=a; pa=pa+1; a=a+1;//表达式必须是可修改的左值 因为 a 是一个数组名,它代表一个常量地址,不能被赋值。尝试这样做会导致编译错误。数组名a在定义后不能改变其指向的地址。