指针与const,指针与数组

指针与const,指针与数组

指针与const,指针与数组

什么是常量指针和指针常量

常量指针是指const来修饰定义一个指针,而指针常量则是定义一个const修饰的指针。

代码示例:

#include

using namespace std;

int main(){

int a1=1,a2=2,b1=3,b2=4;

//常量指针

const int *pb=&b1;

cout<<"pb="<

cout <<"wages[0]字节大小:"<< sizeof(wages[0])<

cout << "wages[0]="<

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在定义后不能改变其指向的地址。

相关文章

《dnf》阳剑怎么样 地下城与勇士阳剑属性解析
篮球体育比分365

《dnf》阳剑怎么样 地下城与勇士阳剑属性解析

⌛ 08-19 👁️‍🗨️ 8990
冒险岛2快速获取装备宝石 宝石搭配
bt365体育开户

冒险岛2快速获取装备宝石 宝石搭配

⌛ 08-25 👁️‍🗨️ 2739