草庐IT

Pointers

全部标签

c++ - 使用带有自定义释放器的 std::unique_ptr 来包装原始指针

我正在尝试使用libsvm对于某个复杂的应用程序,并且由于libsvm主要是一个C库,因此在加载某些数据后,必须使用自定义API函数来释放内存。这就是我的意思:structsvm_model*model;model=svm_load_model("pathtomodelfile");//dosomeprocessingsvm_free_and_destroy_model(&this->model);这些是我使用的libsvmAPI函数的定义:structsvm_model*svm_load_model(constchar*model_file_name);voidsvm_free_an

c++ - 二维数组,*(pointerArray[i] + j)是什么意思?

我刚刚完成了找出这段代码如何工作的任务。intarray[rows][coloums];int*pointerArray[rows];for(inti=0;i我很好奇的是*(pointerArray[i]+j),我认为它与pointerArray[i][j]是同一回事,因为您可以通过两种方式访问​​该元素,但是谁能告诉我我*()到底发生了什么?比如编译器如何知道我要求与pointerArray[i][j]相同?感谢您的回答! 最佳答案 当您执行pointerArray[i]+j时,您请求元素pointerArray[i],它是一个i

c++ - 将原始数据类型转换为 void 指针类型

我正在阅读有关pthreads的文章here.在一个例子中,他们给出了this源代码。在创建线程时,他们传递了一个long类型,类型转换为void*类型给函数!。在函数内部,他们接收这个值并反向转换以获得long值。问题1:是否允许将指针类型转换为原始数据类型,反之亦然(在C和C++中)?Q2。如果是这样,这样做是件好事吗?他们不应该创建一个指向这种long类型的指针,然后将此指针类型转换为void*并将其传递给函数。这种将基本类型转换为指针类型的想法让我感到很困惑?从任何指针类型到void*的转换都可以理解,但是原始数据类型如何存储在void*类型中?是否有可能在特定系统上原始类型的

c++ - 使用 QObject 属性的指针

自从我学习Qt以来,我一直对以下事实感到困惑:在我阅读的文档和书籍中,它们使用指针来表示作为QObject子类实例的属性,例如小部件。我知道QObjects会删除它们的子对象,但除非确实有必要,否则我们不应该避免使用指针吗?这是一个我不使用指针的工作示例:Widget.h文件:#include#include#includeclassWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=0);publicslots:voidchange(int);private:QSliderm_slider;QLabelm_label;Q

c++ - 如何在构造函数中将数组作为参数传递? C++

我正在尝试为类调用创建一个构造函数,其中将4个数组作为参数传递。我试过使用*,&和数组本身;但是,当我将参数中的值分配给类中的变量时,出现此错误:call.cpp:Inconstructor‘call::call(int*,int*,char*,char*)’:call.cpp:4:15:error:incompatibletypesinassignmentof‘int*’to‘int[8]’call.cpp:5:16:error:incompatibletypesinassignmentof‘int*’to‘int[8]’call.cpp:6:16:error:incompatibl

c++ - pointer_traits 为既不是 X<A, T...> 也没有提供成员 typedef element_type 的类型提供什么?

下面的结果是什么?它是格式错误、未定义的行为还是定义良好且格式正确的行为?structA{};std::pointer_traitsx;我之所以问,是因为好奇想知道,也想知道任意类型是不是指针。我还想包括shared_ptr和friend。我想知道是否有类型特征(谓词),如果没有,我是否可以使用pointer_traits并检测是否声明了element_type。 最佳答案 它表示从20.6.3p1开始格式错误,因为它没有element_type并且不是类模板实例化typedefseebelowelement_type;Type:P

c++ - 可以将原始指针传递给需要迭代器的模板函数吗?

能否将原始指针传递给需要迭代器的模板函数?我是否认为迭代器只是一个覆盖指针相关运算符(例如*、++等)的类,或者迭代器是否公开了指针不公开的任何其他接口(interface)?换句话说,指针“看起来像”迭代器吗?例子:我想使用boost::algorithm::knuth_morris_pratt_search(documentationhere)。我的语料库(要搜索的字符串)和模式(要查找的字符串)只是内存中的字节-我有一个包含起始地址和字节长度的指针。为了论证,假设它是一个C风格的字符串。根据文档,knuth_morris_pratt_search函数要求我为语料库和模式传入开始和

c++将函数作为参数传递给另一个带有void指针的函数

我试图将一个函数作为参数传递给另一个带有空指针的函数,但它不起作用#includeusingnamespacestd;voidprint(){cout问题是void函数指针,我可以编写更简单的代码,例如#includeusingnamespacestd;voidprint();voidexecute(void());intmain(){execute(print);//sendsaddressofprintreturn0;}voidprint(){cout但我不知道我是否可以使用void指针它是为了实现这样的东西voidprint(){cout 最佳答案

c++ - 无法在 C++ 中初始化指针数组

我有一个指向名为“表”的结构(该结构称为节点)的指针数组。我在类中这样声明数组:Node*table;然后,在另一种方法中,我初始化表:this->table=newNode[this->length];一切正常。this->length是一个有效条目,this->table指向正确的数组,等等。但是,然后我尝试更改元素的值:for(inti=0;ilength;i++){this->table[i]=newNode;}甚至for(inti=0;ilength;i++){this->table[i]=0;}一切都开始出现问题。为什么我不能将这些指针设置为任何内容?这是我得到的错误:(其

c++ - 指向类的指针会增加模块化吗?

我最近注意到,在编译大型项目(我一直在使用Audacity源代码)时,更改一个被许多其他文件引用的文件,比方说一个被几十个其他文件引用的工具栏小部件,导致编译需要很长时间。如果您需要调整或调试这样的文件,可能需要几分钟或更长时间才能完成每个编译周期。如果您要在引用工具栏的文件中使用指针,编译器是否仍需要重新编译包含对该类的引用的每个文件?如果没有,它是否仍会按设计编译这些文件?在任何现有的语言或框架中,是否可以有一个指向类原型(prototype)而不是实例的指针? 最佳答案 好吧,如果你改变了一个接口(interface),那么你