草庐IT

Pointers

全部标签

C++ 指针赋值语句似乎不起作用/做任何事情

我在模板类(一个简单的FIFO队列)中有以下方法,在GDB调试时,我发现将指针“previous”重新分配给“current”的语句似乎什么也没做。执行此语句时,previous开始为NULL,current不为NULL,但previous仍为NULL。有没有人见过这样的事情?inlineintsearch(QueueEntry*current,QueueEntry*previous,unsignedlonglongt){while(current&&!(current->getItem()->equals(t))){previous=current;//**thislinedoesn

c++ - 这两行代码的区别和好处是什么?

我有两行代码需要解释一下。尽你所能告诉我。主要是每个的好处以及内存等幕后发生的事情。这里有两个结构体作为例子:structEmployee{std::stringfirstname,lastname;charmiddleInitial;DatehiringDate;//anotherstruct,notimportantforexampleshortdepartment;};structManager{Employeeemp;//manageremployeerecordlistgroup;//peoplemanaged};在上述结构中使用这两个更好,为什么?listgroup;lis

c++ - 映射值的地址

我有一个存储在std::map中的设置。例如,WorldTime键的值会更新每个主循环迭代。我不想在需要时从map上读取它(它也在每一帧进行处理),我认为它一点也不快。那么,我可以获取指向map值的指针并访问它吗?代码是:std::mapmSettings;//Somewhereincycle:mSettings["WorldTime"]+=10;//ms//Somewhereinanotherplace,alsocalledincycleDrawText(mSettings["WorldTime"]);//Isslowtocalleachframe所以这个想法是这样的:int*tim

c++ - 在 C++ 中使用数组作为条件表达式是否有效?

我有这个代码:intmain(){charbuffer[10];if(buffer){return1;}return0;}VisualC++10解释如下:buffer衰减为指针,然后将指针与null进行比较。当使用/O2编译时,检查被消除,代码等同于return1;。上面的代码有效吗?VisualC++是否正确编译它(我指的是衰减部分,而不是优化部分)? 最佳答案 C++11,6.4/4:Thevalueofaconditionthatisanexpressionisthevalueoftheexpression,contextua

c++ - 如何处理带有指针的 map ?

假设我有一个名为People的类。我在map中存储指向这些人的指针mapmyMap;要创建新人,我使用maps[]运算符。myMap["dave"]->sayHello();但这给了我一个段错误,它甚至没有调用People类的构造函数。我也试过myMap.insert(std::make_pair("dave",newPeople()));但这并没有改变任何东西,构造函数仍然没有被调用,并且程序因段错误而关闭处理这段代码。如何访问和操作其中包含指针的map?为什么上面的方法不起作用,我没有收到编译时错误或警告。非常感谢任何见解,谢谢 最佳答案

c++ - 结构/对象内的存储顺序

考虑这两种情况:structcustomType{dataType1var1;dataType2var2;dataType3var3;};customTypeinstance1;//Assumevar1,var2andvar3wereinitializedtosomevalidvalues.customType*instance2=&instance1;dataType1firstMemberInsideStruct=(dataType1)(*instance2);classCustomType{public:dataType1member1;dataType2member2;retr

c++ - 使用 strdup() 后将 char* 转换为 int

为什么在使用strdup(value)(int)value后返回与之前不同的输出?如何获得相同的输出?我的简短示例出错了,请使用长示例:这里是完整的测试代码:#include#includeintmain(){//TheFirstPartchar*c="ARD-642564";char*ca="ARD-642564";std::cout>x;} 最佳答案 因为在您的情况下数组衰减为指针,所以您正在打印一个指针(即,在非奇异计算机上,一个内存地址)。不能保证指针适合int。在代码的第一部分,c和ca不必相等。您的编译器执行某种内存优化

c++ - 如何将数组中的值复制到新数组中?

我已经断断续续地尝试解决这个问题一个星期了,但我一直遇到问题。我的目标:编写一个为整数数组分配内存的函数。该函数将整数指针、数组大小和要分配的newSize作为参数。该函数返回指向已分配缓冲区的指针。首次调用该函数时,大小将为零并创建一个新数组。如果在数组大小大于零时调用该函数,将创建一个新数组并将旧数组的内容复制到新数组中。您的讲师已提供arrayBuilder.cpp作为此编程挑战的起始代码。此外,Lab9_1.exe是您可以测试的此应用程序的可执行文件。代码:#includeusingnamespacestd;int*arrayBuilder(int*arr,intsize,in

c++ - 将 int[][] 分配给 int**

这个问题在这里已经有了答案:HowdoIusearraysinC++?(5个答案)关闭8年前。据我所知,在某些情况下,数组会转换为指向其第一个元素的指针:inta[5];int*p;p=a;按照这种方法并考虑到我可以将数组分配给指针,为什么我不能将二维数组分配给指向指针的指针?inta[5][5];int**q;q=a;但是,我可以将指针数组分配给指向指针的指针:int*p[5];int**q;q=p;如果将数组转换为指向其第一个元素的指针,则在第二个示例中发生q=a时,a应该是指向a[0]的指针,而a[0]应该是指向a[0]的指针[0],对吧?此外,如果我这样做,我不会收到错误:co

c++ - 你能把QWidgets放到栈上吗?

背景故事:我审查了我的一些代码,我制作了一个本地QMessageBox用于显示错误,并将其分配到堆中:if(getAutopilotList.error()==0){QMessageBox*error=newQMessageBox(0);error->setDetailedText(getAutopilotList.errorString());error->setText("something");error->setWindowTitle(tr("Error!"));error->show();return;}开发者说:Thispointerwillleak,youaresetti