C++第十天

本文详细介绍了C++指针的基本概念、定义、初始化、取值方式、使用方法及注意事项,包括指针与引用的区别、指向指针的指针、指针的操作和类型转换等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


	指针:指针是指向某种类型对象的复合数据类型,或者称指针就是存放对象的地址。
	访问指针的值:使用解引用操作符 * 和自增操作符++,与在迭代器上的用法类似。
	取址操作符:&操作符,获取一个变量的地址。
	
	指针的定义和初始化:
		C++语言使用*符号把一个标识符声明为指针,例如:
				//声明指针的风格之一
				vector<int> *pevec;
				int *ip1,*ip2;
				//声明指针的风格之二
				string* str;  //str为指针
		建议使用声明指针的风格一,因为风格二连续声明指针容易导致混淆,例如:
				string* ps1,ps2;      //ps1为指针,ps2为变量
				string* ps1,*ps2;		//ps1和ps2都为指针。
		
	指针的可能的取值:
		1.保存一个特定对象的地址
		2.指向某个对象后面的另一个对象
		3.0值,表明不指向任何对象。
	(为初始化的指针是无效的,直到该指针赋值后,才可使用它。)
	
	避免使用未初始化的指针,除非所指向的对象已经存在,否则不要先定义指针,这样可以避免定义一个未初始化的指针。
	如果必须分开定义指针和其所指向的对象,则将指针初始化为0,因为编译器可检查出0值的指针,程序可判断指针并未指向一个对象。


	void* 指针:
		void*指针可以保存任何类型的对象的地址。
		不允许使用void*指针操纵它所指向的对象。
		不能使用void*指针保存const对象的地址,而必须使用const void*类型的指针保存const对象的地址

	修改指针的值和修改指针指向对象的值
		修改指针所指向对象的值:需要解引操作。
			*sp="goodbye";
		修改指针的值:给指针直接赋值即可修改指针的值
			string s2="some value";
			sp=&s2;

	指针和引用的比较:
		引用总是指向某个对象,定义引用时没有初始化时错误的。
		引用已经初始化,就始终指向同一个特定对象。
		给引用赋值修噶ide是该引用所关联的对象的值,而并不是使引用于另一个对象关联。
		例如:
			int &ri=ival,&ri2=ival2;
			ri=ri2;
		这个赋值操作修改了ri应用的值ival对象,而并非引用本身,赋值后,这两个引用还是分别指向原来关联的对象,此时两个对象的值相等

	指向指针的指针:
		int ival=11;
		int *pi=&ival;
		int **ppi=π  //指向指针的指针。

	指针的操作:
		两个指针相见的结果是标准库类型的ptrdiff_t的数据,ptrdiff_t在cstddef头文件中定义。
		指针的自增操作时指向下一个对象的地址,指针的自减操作时指向上一个对象的地址

	使用指针遍历数组:
		const size_t arra_sz=5;
		int int_arr[arra_sz]={0,1,2,3,4};
		for(int *pbegin=int_arr,*pend=int_arr+arra_sz;pbegin!=pend;++begin){
			cout << * pbegin<<'';
		}
	
	指向const对象的指针和const指针:
		指向const对象的指针也必须具有const特性,例如:
			const double *cptr;  //指向const对象的指针,允许cptr重新赋值,不能修改指向对象的值,因为指向的对象是const对象
		const指针:
			int eNum=0;
			int *const curErr=&eNum;   //const指针,不能修改指针的值,也就是不能指向其他的对象,可以修改指针指向的对象的值
			(const指针也可以指向const对象,即指向指针的值不能修改,也不能修改指针的值)


	指针和typedef
		typedef string *pstring;
		const pstring cstr;//指向string类型的const指针
		等价于:string *const cstr;
		声明const pstring时,const修饰的是pstring的类型,这是一个指针,该声明语句应该是把cstr定义为指向string类型对象的const指针。


#include<iostream>
using std::cout;
using std::cin;
using std::endl;
int main(){
	/*
	int ival=1024;
	int *pi;//=&ival;
	cout<<ival<<"\n"<<*pi<<endl;
	*/
	 int i=-1;
	 const int ic=1;
	// const int *pic=⁣
	 i=ic;
	 //指向const对象的const指针
	const int *const cpi=⁣
	//int *const ccc=cpi;
	//ic=*cpi;
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值