const int *p表明,const int是常量还是变量
对于指针和常量,以下三种形式都是正确的:
const char * myPtr=char _ A;//指向常数的指针
char * const myPtr=char _ A;//指向常数的指针
const char * const myPtr=char _ A;//指向常量的常量指针
下面依次介绍三种类型。
因为*运算符是左运算符,所以左运算符的优先级是从右向左的。为
1.常量指针(常量指针)
int * const p
再看*之前的const,不过P是常量指针。你不能修改指针的指向,但是存储在这个指针指向的地址的值可以被修改。
查看代码
#包括iostream
#包含stdlib.h
使用命名空间std
void main()
int i1=30
int i2=40
Int * const pi=//这里的pi指针常量。
//pi=//这里注意pi不能这样重新赋值,也就是不能指向另一个新地址。所以我给它做了注解。
printf(%dn ,* pi);//输出是30
i1=80//5.想想看:*这里可以用pi=80来代替?可以,这里可以通过*pi修改i1的值。
printf(%dn ,* pi);//输出是80
系统(“暂停”);
}
查看代码
char char _ A= A
char char _ B= B
char * const myPtr=char _ A;
myPtr=char _ B;//错误-无法更改myPtr的地址
2.指向常数的指针(指向常数的指针)
常数int *p
先看const然后,定义一个指向常量的指针,这个指针指向的值不能被指针修改。
查看代码
#包括iostream
#包含stdlib.h
使用命名空间std
void main()
int i1=30
int i2=40
const int * pi=i1
printf(%dn ,* pi);//输出是30
Pi=//注意,这里Pi可以随时重新分配一个新的内存地址。
i2=80//想想看:*这里可以用pi=80来代替?当然不是。
printf(%dn ,* pi);//输出是80
系统(“暂停”);
}
char char _ A= A
const char * myPtr=char _ A;
* myPtr= J//错误-无法更改*myPtr的值
所以指针p指向的整数是一个常数,它的值是不可修改的。
3.指向常量的常量指针
对于“const指针指向常量”,需要同时满足上述1和2的内容,指针的值和指针所指向的值都不能修改。
4.引入字符数组和字符指针。
字符和字符指针的定义如下:
char a[]=我爱你!;//定义了字符数组
“我爱你!”;//定义了字符指针
a可以理解为const指针,p则是指向常量的指针。代码示例如下:
查看代码
#包括iostream
#包含stdlib.h
使用命名空间std
void main()
char a[]=我爱你!;//定义了一个字符数组。数组名A是一个const指针,指向的位置是一样的,是数组第一个元素的位置。
“我爱你!”;//定义了一个字符指针,指针p指向一个字符串常量,不可修改。
//*(P1)= a ;//错误,不能修改指针指向的值,所以在这里注释掉。
a[1]= a ;//const指针,不能修改指针的值,但是可以修改指针所指向的值。
//a=p;//错误,A是常量指针,不能修改它的值。
cout a endl
cout p endl
cout a[1]endl;
cout *(p2)endl;
系统(“暂停”);
}
输出值为:
我爱你!
我爱你!
a
L