ca30a_demo_C++_指针和const限定符_特殊的指针E0349

无人久伴 提交于 2020-01-27 15:04:55

/*30_C++_指针和const限定符txwtech
特殊的指针
1.指向const常对象的指针
2.const指针,一旦指向一个对象,就不可以修改,不能指向其它的
3.指向const对象的const指针,//定义时必须初始化。数据不可以修改。
指针和typedef
理解复杂的const类型声明
例如:
 const dobule pi=3.14159;
 //---1
 const dobule *p;// p普通指针,dobule类型是个常量,指向常量的double(普通p->常double)
 //---2 (一旦指向一个对象,就不可以修改,不能指向其它的)
 double *const p=π//p是常指针,指向的double,double不是常量(常p->普通double)
 //---3
 const double *const p=π//p是常指针,指向常量的double的常指针(常p->常double)
*/

 

cout << "ps:" << *ps << endl;//没有添加#include <string>
    //cout << "ps:" << s << endl;//严重性    代码    说明    项目    文件    行    禁止显示状态
    //错误(活动)    E0349    没有与这些操作数匹配的 "<<" 运算符    ca30a_demo    C : \Users\TT2018\Documents\Visual Studio 2017\Projects\ca30a_demo\ca30a_demo\ca30a_demo.cpp    34

 

/*30_C++_指针和const限定符txwtech
特殊的指针
1.指向const常对象的指针
2.const指针,一旦指向一个对象,就不可以修改,不能指向其它的
3.指向const对象的const指针,//定义时必须初始化。数据不可以修改。
指针和typedef
理解复杂的const类型声明
例如:
 const dobule pi=3.14159;
 //---1
 const dobule *p;// p普通指针,dobule类型是个常量,指向常量的double(普通p->常double)
 //---2 (一旦指向一个对象,就不可以修改,不能指向其它的)
 double *const p=&pi;//p是常指针,指向的double,double不是常量(常p->普通double)
 //---3
 const double *const p=&pi;//p是常指针,指向常量的double的常指针(常p->常double)
*/
#include <iostream>
#include <string>

using namespace std;


void doA(const int *p)//常指针避免参数修改
{

}
typedef string *pstring;
int main()
{
	string s("Hello");
	pstring ps;
	//string *ps;
	ps = &s;
	cout << "ps:" << *ps << endl;//没有添加#include <string>
	//cout << "ps:" << s << endl;//严重性	代码	说明	项目	文件	行	禁止显示状态
	//错误(活动)	E0349	没有与这些操作数匹配的 "<<" 运算符	ca30a_demo	C : \Users\TT2018\Documents\Visual Studio 2017\Projects\ca30a_demo\ca30a_demo\ca30a_demo.cpp	34

	const pstring cstr=&s;//cstr是什么?=string *const cstr;,cstr就是常指针,需要初始化,(常p->普通string),p就是指针
	const string * cstr2;//普通p->常string)
	string *const cstr3=&s;//(常p->普通string)
	
	double a = 1.2;
	double *p = &a;
	cout << "ps:" << *p << endl;

	*p = 1.8;//普通指针可以修改其值

	const double pi = 3.14;//常double
	//p = &pi;//错误,p不是const(常p->常double)

	const double *cptr;
	cptr = &pi; //(常p->常double)
	//getchar();
	cptr = &a;//(常p->普通double)
	//*cptr=1.5; //常p不可以修改值

	int errNum = 0;
	int nNum = 9;
	int *const curErr = &errNum;//(一旦指向一个对象,就不可以修改,不能指向其它的)(常p->普通int)
	//curErr = &nNum;//这个是错误的

	const double *const pi_ptr = &pi;//定义时必须初始化。数据不可以修改。
	//pi_ptr=&a;//不能指向其它对象
	//*pi_ptr=3.19;//错误,数据不可以修改。

	const string s1; //const位置都可以,注意正确使用方法
	string const s2;//const位置都可以

	return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!