复合类型:引用和指针

  • Post author:
  • Post category:其他


//引用:为对象起了另外一个名字
//不能把int变量赋给 int *的变量,就算变量的值是0也不行
#include<iostream>
int main() {

	using namespace std;
	//int a = 100;
	//int& b = a;
	//int* p = &a;
	//int* s = p;//指针只能用指针类型的变量拷贝,或者用&取地址赋值。。
	//cout << s << " " << p << endl;
	//p = 0;
	//cout << s << " " << p<<"  "<<b;

	double obj = 3.14, * pd = &obj;
	void* pv = &obj;//pv可以存放任意对象的地址。
	if (pv == pd) {
	
		cout << "1";
	}
	*pd = 2323.000;
	void *a;
	a = pv;
	/*    
	不合法:void类型的指针,不能直接对指针指向的对象进行操作,因为我们无法知道这个对象的数据类型。
	*pv = 44444.00;
	不合法:void *类型的对象不能给其他数据类型的指针(其他的对象也不行————不跟傻子玩。。。倒是可以给另外一个void *对象————另外一个傻子 赋值)赋值;	  
	pp = pv;
	不合法:只能输出完整对象类型的指针
	cout << endl << *pv;
	
	*/
	cout << "  " << a << "  " << pv;



}



指向指针的指针

int ival = 1024;
int *pi = &ival;
int **ppi = &pi;

在这里插入图片描述

#include<iostream>
using namespace std;
int a = 100;
int* p = &a;//*是解引用符号(虽然这里的*号,我认为更多的是表示指针类型,而不是解引用符),而*前的类型就是解引用后得到的数的类型。
int** s = &p; //这里int * *s,说明s解引用会得到一个int *类型的数。也就是一个指针。如果为了访问最原始的那个对象,需要对指针做两次解引用。

int main() {

	cout << s << endl; //指针类型变量p的地址
	cout << &p << endl;
	cout << &*s << endl; //p的地址 = &p = s = &*s

	cout << *&p << endl;

	cout << p << endl;//int 类型变量a的地址
	cout << *s << endl;//指针类型变量p所指向的地址,也就是p存储的值
	cout << &a << endl;//p指向的数的地址 = p= *s = &a
	
	cout << **s << endl;//指针变量p所指向的内存空间里的内容,也就是a的值
	cout << *p << endl;
	cout << a << endl;//解引用的尽头 = a = *p = **s


}

在这里插入图片描述



版权声明:本文为pplpkoopk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。