指针常量与常量指针
//
// main.cpp
// pointer
// 指针常量与常量指针
// 不管是指针常量还是常量指针其本质都是指针,所以他们需要赋值的是一个地址。
// 很多时候利用指针进行输出的时候 总是输出指针的地址了,经常性的忘记需要输出指针地址中的内容。
// const int *还是int const * 都是指针常量 ,那常量指针怎么写法?常量指针是在int 与 const之间写* 即:int *const
// Created by mac on 2019/4/6.
// Copyright © 2019年 mac. All rights reserved.
//
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
int b=3;
int c=4;
int e=40;
int f=80;
//指针常量:指的是一个指针指向一个常量
const int *q =&b;
cout<<*q<<endl;
q=&c;
cout<<*q<<endl;
//*q=5;//可以改变指针的方向,但是指向的地址的值无法修改。
//常量指针----本质是个指针,但是这个指针是常量的,意味着你是不可以随便的就可以更改指针的指向的。
int *const p=&e;
cout<<*p<<endl; //输出指针指的内容
//换个指向,让他指向f
//p=&f;
// cout<<*p<<endl;
//给他换个值
*p=90; //这个语句是错误的 也就是说也是指针常量
cout<<*p<<endl;
return 0;
}
Tips
- 除此之外需要警惕指向常量的常量指针。
const int *const p = &q;
既不能改变指向,也不能改变指向内存中的值。 - 如果函数的形参中有引用,那么在调用函数传参的时候注意与指针形参的区别。
- 数组的名字真的可以看作是指针常量吗?看下面的例子
//
// main.cpp
// 数组与指针
//
// Created by mac on 2019/4/14.
// Copyright © 2019年 mac. All rights reserved.
//
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
/*
const double *arr = &arr[0];
*/
double arr[]={1.1,2.2,3.2,4.2,5.0};
*arr=3.3; //可以修改arr[0]的值
//arr=&arr[0]; //无法指向arr[0] ,重复指向编译失败。 所以数组名字真的可以当作指针常量吗??
for (int i=0; i<5; ++i) {
cout<<arr[i]<<endl;
}
double a=2.4;
const double *b=&a;
b=&a;//重复指向也是可以编译通过的。
int c=90;
int *q=&c;
q=&c; //重复指向可以编译通过
return 0;
}
未经本人准许,禁止转载.