草庐IT

Pointers

全部标签

c++ - 在 C++ 中声明指向结构的指针会自动为其成员分配内存。我错了吗?

我编写了以下代码,我相信如果我试图访问我什至没有为其分配内存的结构的成员,它就会崩溃。但我很惊讶C++自动为结构分配内存。这是正常行为吗?相比之下,如果您声明一个指向对象的指针,然后尝试访问任何成员而没有使用运算符“new”实际创建对象,程序就会崩溃。我只是好奇为什么它会起作用,而我认为它不应该起作用。这是我的程序:#includestructProduto{intcodigo;floatpreco;};intmain(){structProduto*sabonete;sabonete->codigo=654321;sabonete->preco=0.85;printf("Codigo

c++ - std::sort 在 std:vector of pointers 上失败

以下代码在对vector进行排序时崩溃。#include#include#includeusingnamespacestd;structFoo{intx;//inty;Foo():x(0){}};structCmp{booloperator()(Foo*p1,Foo*p2)const{if(p1->x!=p2->x)returnp1->xx;//if(p1->y!=p2->y)returnp1->yy;returntrue;}};intmain(){vectorv;for(inti=0;i为什么会这样? 最佳答案 boolopera

c++ - 删除指针和将其设置为 nullptr 之间有什么区别?

这个问题在这里已经有了答案:deletevsNULLvsfreeinc++(6个答案)关闭7年前。deletepointer和pointer=nullptr是一样的吗?可能不是,但后者会释放内存吗?deletepointer怎么样?pointer=nullptr/pointer=nullptr;删除指针?为什么不使用它来提供一种安全的方法来在需要时过早删除指针,因为它们通常会在其他时间被删除并导致正常删除出错?

c++ - 指向指针的指针

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Usesformultiplelevelsofpointerdereferences?我正在阅读另一篇文章,这让我想到了这个问题。这样的事情到底意味着什么?人们对一个指向一个指针的指针指向一个指针指向一个指针的指针的理解有多深……我理解指针指向指针但是为什么在那之后你会走得更远?您使用****有多深?Foo(SomePtr***你好);

c++ - 什么是字符*?

为什么我们需要*?char*test="testing";据我了解,我们仅将*应用于地址。 最佳答案 这是一个字符:charc='t';它只能容纳一个character!这是一个C字符串:chars[]="test";它可以容纳多个characters。上面的另一种写法是:chars[]={'t','e','s','t',0};末尾的0称为NUL终止符。它表示C字符串的结尾。char*存储C字符串的起始内存位置。1例如,我们可以用它来引用同一个数组s我们上面定义的。为此,我们将char*设置为s的first元素的内存位置:char*

c++ - 在析构函数中删除指针时崩溃

我遇到了对C++指针缺乏深刻理解的问题。我编写了一个名为Skymap的类,它具有以下定义:classSkymap{public:Skymap();~Skymap();voidDrawAitoffSkymap();private:TCanvasmCanvas;TBox*mSkymapBorderBox;};函数定义为:#include"Skymap.h"Skymap::Skymap(){mCanvas.SetCanvasSize(1200,800);mMarkerType=1;}Skymap::~Skymap(){deletemSkymapBorderBox;}voidSkymap::D

C++ char * 指针传递给函数并删除

我有以下代码:#includeusingnamespacestd;voidfunc(char*aString){char*tmpStr=newchar[100];cin.getline(tmpStr,100);delete[]aString;aString=tmpStr;}intmain(){char*str=newchar[100];cin.getline(str,100);cout为什么第二个cout不打印第二个输入字符串?我怎样才能更改此代码以使其正常工作? 最佳答案 正如GregS所说,简单的答案是使用引用来声明您的函数:v

c++ - 这行代码是如何工作的?

所以我最近在看某人的代码,我发现编译器没有报错,也没有以下任何运行时错误:constchar*p="Ididn'tmalloc...";上面的代码有效,但我想知道如何。这就是我认为正在发生的事情。谁能证实这一点?所以“我没有malloc...”在编译时在堆栈上静态分配,地址被传递给指针p。类似于静态数组的分配方式。我对此有90%的把握,但一些确认会有所帮助。谢谢。 最佳答案 你有一个字符串文字"Ididn'tmalloc..."位于只读内存中的某处(确切地说是实现定义的位置),它由指针p指向。需要注意的重要一点是,任何更改此字符串文

c# - C# 列表是否类似于 C++ 列表?

我只是想知道C#列表是否类似于C++列表。在C++中删除大列表中间的元素很快,因为我知道这些元素只是指向下一个元素。那么当删除一个大的C#列表中间的元素时,这与在C++中一样吗?还是C#列表更像是带有索引的C++vector,因为您可以获得C#列表中元素的索引号。 最佳答案 C#List类似于C++vector,并且具有相同的性能特征.C#LinkedList与C++list类似,并且具有相同的性能特征..net文档相关部分的备注部分详细讨论了性能特征:List,LinkedList.

c++ - char * (*arr)[2 ] 和 char **array[2] 有何不同?

char*(*arr)[2]和char**array[2]有何不同??如果我使用函数传递char*strings[2]那么如何从问题第一部分提到的两种方式访问​​元素?还请告诉其他访问指针数组元素的方法。谢谢。 最佳答案 CDecl报告:char*(*arr)[2]declarearraspointertoarray2ofpointertochar和char**arr[2]declarearrasarray2ofpointertopointertochar只是[]数组声明符的优先级高于*指针限定符,所以括号改变了含义。