//引用:为对象起了另外一个名字
//不能把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 = π
#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 版权协议,转载请附上原文出处链接和本声明。