C++相关
指针
含义: 存储变量的内存地址。
定义: 数据类型+ * + 指针名字(前缀p)。需要注意的是,指针定义出来之后,一般让他指向(nullptr)或者指向一个可用的内存地址。
int nNum = 0;
//&取地址符,注意跟引用的区别。
int* pNum = &nNum;
or
int* pNum=nullptr;
另一种定义方式,则是使用new主动申请内存,同时new出来的内存,如果不用最好要delete(释放内存)
int* pNum1 = new int();
*pNum1 = 1000;
delete pNum1;
//一般来说在释放内存的时候,会把指针置空。
pNum1 = nullptr;
使用操作: 在使用指针的时候,一般会去做一个处理,判断指针可用。(这个指针指向可用的内存地址)。拿到指针所指向内存地址上的内容,取值符号 *
int nNum = 0;
int* pNum = &nNum;
if (pNum1)//如果pNum1指向空,那么这个if是不成立。
{
cout << *pNum << endl;
nNum = 100;
cout << *pNum << endl;
*pNum = 1000;
cout << nNum << endl;
}
//输出0 100 1000
补充:
两种通过函数和指针交换数据的区别。
void swap(int* pNum1, int* pNum2)
{
//交换的是形参的存储的地址。实参不会变。
int* pTemp = pNum1;
pNum1 = pNum2;
pNum2 = pTemp;
}
void swap1(int* pNum1, int* pNum2)
{
//交换指针所指向的内存地址上的内容
int nTemp = *pNum1;
*pNum1 = *pNum2;
*pNum2 = nTemp;
}
容器和指针的使用。包括容器定义,容器清空,容器对象和方法的访问。
struct SData
{
SData()
{
}
void onBackUp()
{
nRowBk = nRow;
nColBk = nCol;
}
int nRow;
int nCol;
int nRowBk;
int nColBk;
};
int main()
{
//定义容器,容器存储指针。
vector<SData*> vecDatas;
for (int i = 0; i < 10; i++)
{
SData* pData = new SData();
vecDatas.push_back(pData);
}
//关于容器清空问题
//以前直接存储对象的时候,操作系统申请的内存,会负责回收,所以容器.clear();
//使用指针时不能直接clear
for (int i = 0; i < vecDatas.size(); i++)
{
if (vecDatas[i])
{
delete vecDatas[i];
vecDatas[i] = nullptr;
}
}
vecDatas.clear();
//指针访问容器方法和属性操作
SData* pData = new SData();
pData->nRow = 100;
pData->nCol = 200;
pData->onBackUp();
if (pData)
{
cout << pData->nRow << endl;
cout << pData->nCol << endl;
cout << pData->nRowBk << endl;
cout << pData->nColBk << endl;
}
//输出100 200 100 200
}