C++指针问题

C++中的指针是一个变量,其存储的是值的地址,而不是值的本身,我们来看看指针与C++基本原理:
在这里插入图片描述
指针的声明方式:
运算符两边的空格是可选的。传统上C程序员使用这样的格式:
int ptr;
这强调
ptr是一个 int 类型的值,而很多C++程序员使用这种格式:
int
ptr;
这强调的是:int是一种类型,是指向int 的指针。在哪里添加空格对于编译器来说没有任何区别。
在C++中,int
是一种复合类型,是指向int 的指针
指针使用注意事项:
C++在创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。为数据提供空间是一个独立的步骤
在这里插入图片描述
C++中使用new来分配内存
程序员要告诉new,需要为哪一种数据类型分配内存:new将找一个长度正确的内存块,并返回该内存块的地址。程序员的责任是将该地址赋给一个指针
例如:
int* ptr=new int;
new int 告诉程序,需要合适存储int 的内存。new运算符根据数据类型来确定需要多少字节的内存,然后它将找到这样的内存,并返回其地址
释放内存:
只能使用delete来释放使用new分配的内存。对于空指针使用delete是安全的
例如:
int* ptr;
…;
delete ptr;
这将释放ptr指向的内存,但不会删除ptr指针本身,随后也可以将ptr重新指向另一个新分配的内存块。一定要配对的使用new和delete;否则将会发生内存泄露,也就说,被分配的内存再也无法使用了。如果内存泄漏严重,则程序将由于不断寻找更多内存而终止。
一般来说,不要创建两个指向同一个内存块的指针,因为这样将增加错误地删除同一个内存块两次的可能性
指针在使用文件中的示例:
unsigned char pImageBand1 = NULL;
pImageBand1 = new(std::nothrow) unsigned char[width1
height1*bandCount1];//确定内存大小

GDALDataset *WriteDataSet = poDriver->Create(“D:\Datas\Landsat\band_merge2.tif”, width1, height1, 3, GDT_Byte, papszOptions);
if (WriteDataSet->GetRasterBand(1)->RasterIO(GF_Write, 0, 0, width1, height1, pImageBand1, width1, height1, GDT_Byte, 0, 0) == CE_Failure)
{
return false;
}
图片来源:《C++ Primer Plus(第6版)》

@遥感的感觉

发布了16 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_37554556/article/details/84525863