从最近开始,博主逐步向着一个程序员的方向发展,而不仅仅是个学生。所以我会对在编程过程中学到的知识点进行总结,以帮助记忆,如果对知识点有什么问题欢迎评论。
“软释放”问题:
问题描述:一个指针的指向内存中有其它指针,当前者被释放时,后者是否仍然存在?
是的,后者的指向区域依然存在。
实例
struct structName
{
int2* flatLeft2;
}
当一个指向stuctName
的指针被释放时,flatLeft2
所指向的内存地址不会发生变化。
指针执行区域修改问题:
问题描述:如何修改一个指针的指向内存?
实例
方案一:直接修改
int data1[] = { 1,2,3,4,5 };
int data2[] = { 8,6,3,2,3 };
int*tempdata;
tempdata = data1;
cout << tempdata[1] << endl;
tempdata = data2;
cout << tempdata[1] << endl;
方案二:如果指针在结构或者类中
请参考大佬的博文:CUDA拷贝结构体成员指针思想上大同小异
#include<stdlib.h>
#include<iostream>
using namespace std;
class testClass
{
public:
testClass();
~testClass();
//返回testData的内存地址
int** TestFunc()
{
return &testData;
}
private:
//如果这是动态分配的,一定得记得释放哈
int* testData;
}
int main()
{
//临时手写,如有问题欢迎指出
int data[]={1,2,3,4}
testClass tempClass;
//首先申请临时指针
int** tempData = tempClass.TestFunc();
//然后修改指针的指向区域即可
*tempData = data;
system("pause");
return 0;
}