#include<iostream>
#include<string>
using namespace std;
struct user {
string name;
int age;
};
int main() {
//用&获取一个变量的十六进制地址
int num = 100;
double dnum = 4.5;
cout << "num value is " << num << " address is 0x" << &num << endl;
cout << "dnum value is " << dnum << " address is 0x" << &dnum << endl;
//指针用type *name来表示,type表示指针类型,name表示内存地址。*name表示内存地址存储的值.
int* nump = # //声明并初始化一个int类型指针
cout << "nump=" << nump <<", *nump=" << *nump << endl;
*nump = *nump + 1;//改变指针的值,也就是改变内存地址中存储内容的值。
cout << "nump=" << nump << ", *nump=" << *nump << endl;
cout << "num value is " << num << " address is 0x" << &num << endl;
/*
注意:创建指针一定要初始化,即是马上给一个内存地址。
*/
//new分配内存
int* pt = new int;
*pt = 101;
cout << "*pt value is " << *pt << " address is 0x" << pt << endl;
//delete释放内存地址
delete pt;
/*
注意delete将释放pt指向的内存,但不会删除指针pt本身,还可以为pt重新分配内存地址。
一定要配对的使用new 和 delete,否则将发生内存泄露。
不要释放已释放过的内存地址。不能释放声明变量的内存地址。比如:
int num = 100;
int* pp = #
delete pp;//不要这样做
*/
//使用new创建数组
int * pi = new int[3];
pi[0] = 100;
pi[1] = 200;
pi[2] = 300;
cout << "pi[1]=" << pi[1] << endl;
pi = pi + 1; //c++把数组名解析为地址,地址+1增加的量等于它指向的类型的字节数,这里是int,也就是加4个字节。
cout << "pi[0]=" << pi[0] << endl;
pi = pi - 1;
delete[] pi;//切记要从输出起始位置释放数组地址
//使用new创建结构
user* u = new user;
u->name = "hello";
u->age = 100;
cout << u->name << " " << u->age << endl;
delete u;
return 0;
}
输出结果:
num value is 100 address is 0x00000089B16FF984
dnum value is 4.5 address is 0x00000089B16FF9A8
nump=00000089B16FF984, *nump=100
nump=00000089B16FF984, *nump=101
num value is 101 address is 0x00000089B16FF984
*pt value is 101 address is 0x0000024F9A6C4CD0
pi[1]=200
pi[0]=200
hello 100
请按任意键继续. . .