1)变量的地址
变量是内存地址的简称,在C++中,每定义一个变量,系统就会给变量分配一块内存,内存是有地址的。
C++用运算符&获取变量在内存中的起始地址。
语法:&变量名
#include <iostream>
using namespace std;
int main()
{
int a;
char b;
bool c;
string d;
cout<<"变量a的地址是:"<< (long long)&a<<endl;
cout<<"变量b的地址是:"<< (long long)&b<<endl;
cout<<"变量c的地址是:"<< (long long)&c<<endl;
cout<<"变量d的地址是:"<< (long long)&d<<endl;
//输出的是变量abcd的地址
}
2)指针变量
指针变量简称指针,它是一种特殊的变量,专用于存放变量在内存中的起始地址。
语法:数据类型 *变量名
数据类型必须是合法的C++数据类型
3)对指针赋值
不管是整形、浮点型、字符型、还是其他的数据类型的变量,它的地址都是一个十六进制数。我们用整形指针存放整形变量的地址,用字符型指针存放字符型变量的地址,用浮点型指针存放浮点型变量的地址,用自定义数据类型指针存放自定义数据类型变量的地址。
语法:指针=&变量名
#include <iostream>
using namespace std;
int main()
{
int a;
char b;
bool c;
string d;
int *pa=&a;
char *pb=&b;
bool *c=&c;
string *d=&d;
cout<<"变量a的地址是:"<< (long long)&a<<endl;
cout<<"变量b的地址是:"<< (long long)&b<<endl;
cout<<"变量c的地址是:"<< (long long)&c<<endl;
cout<<"变量d的地址是:"<< (long long)&d<<endl;
//输出的是变量abcd的地址
cout<<"变量a的地址是:"<< (long long)pa<<endl;
cout<<"变量b的地址是:"<< (long long)pb<<endl;
cout<<"变量c的地址是:"<< (long long)pc<<endl;
cout<<"变量d的地址是:"<< (long long)pd<<endl;
//输出的与上面一致
}
注意:
对指针的赋值操作也通俗的被称为”指向某变量“,被指向的变量的数据类型称为”基类型“。
如果指针的数据类型与基类型不符,编译会出现警告,但是可以强制转换他们的类型。
int a;
char b;
int *pa=(int*)&b;
char *pb=(char*)&a;
4)指针占用的内存
指针也是变量,是变量就要占用内存空间
在64位的操作系统中,不管是什么类型的指针,占用的内存都是8字节。 32位是4字节。在C++中,指针是复合数据类型,复合数据类型是指基于其他类型而定义的数据类型,在程序中,int是整形数据,int*是整形指针类型,int*可以用于声明变量,可以用于sizeof运算符,可以用于数据类型的强制转换,总的来说,可以把int*当成是一种数据类型。