草庐IT

指针认证

全部标签

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

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

c++ - 删除向上转换为基指针的对象数组

开始将一些库从msvc移动到mingw,并发现当有人想要删除一个arrayupcastedobjects时msvc的非常有趣的行为。即msvc做了一些黑魔法(它似乎喜欢这样做)并且波纹管代码执行得很好,但是在mingw中(4.7.2(崩溃。我相信mingw正在正确执行并且它的msvc巫术就是制作睡虫。代码:#includeclassfoo{staticintidgen;protected:intid;public:foo(){id=idgen++;std::coutmsvc2010的输出Hello(foo-0)Hello(bar-0)Hello(foo-1)Hello(bar-1)By

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

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

c++ - 是否可以将整数指针转换为位于该内存位置的实际整数?

通常,我们在C++中这样声明变量:intexampleInteger;如果我有一个指向整数地址的指针怎么办?我可以声明一个位于特定内存地址的整数吗?int*exampleIntegerPtr=(int*)0x457FB;intexampleInteger=*exampleIntegerPtr;不幸的是,第二个示例中的exampleInteger与第一个示例中的exampleInteger不同。第二个示例创建一个新变量,该变量与位于exampleIntegerPtr的整数具有相同的值。是否有可能以某种方式获取位于exampleIntegerPtr的实际整数?

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),那么你

带有运算符[]的c++ const指针

char*constp="world";p[2]='l';第一条语句创建了一个由常量指针p指向的字符串,第二条语句试图修改字符串,被编译器接受,而在运行时,弹出访问冲突异常,谁能解释为什么? 最佳答案 所以你的问题有两个方面:为什么会出现访问冲突:字rune字字符串作为文字存储在可执行程序的CODE页中;大多数现代操作系统不允许更改这些页面(包括MS-windows),因此出现保护错误。为什么编译器允许它:const关键字在此上下文中指的是指针而不是它指向的东西。代码如p="Hello";将导致编译器错误,因为您已将p声明为常量(不

c++ - QT Creator 和使用智能指针完成奇怪的代码

我正在使用qtcreator(2.8.1),使用智能指针时出现一些奇怪的行为。看看这个片段:classmyclass{public:voidtest(){};};....std::shared_ptrfoo(newmyclass);foo->test();std::unique_ptrbar(newmyclass);bar->test();如果我键入“foo->”,代码完成窗口会弹出,但如果我键入“bar->”,则什么也不会发生。知道为什么代码补全只适用于shared_ptrs而不适用于unique_ptrs吗?更新:知道我正在使用带有CMake和add_definitions(-st

c# - 将 C++ 代码(使用指针和位移)转换为 C#

我目前正在参与一个将C++代码移植到C#代码的项目,但有些片段并不容易一对一移植,如下所示:#defineCMND_MOVEL10#defineCMND_EXTRASIDE0x80charCmndBuffer[32];int*dst;dst=(int*)&CmndBuffer[0];*dst=0;*dst|=(CMND_MOVEL+(Flags=0){if(sendto(UdpCmdSocket,(constchar*)CmndBuffer,28,0,(structsockaddr*)&UdpCmdPeer,sizeof(UdpCmdPeer))!=SOCKET_ERROR){//mo

C++11 std::promise 从线程返回 std::string,数据指针看起来已复制未移动

我开始使用C++11标准和内置线程。根据我在获得future值时收集到的信息,它是使用移动运算符完成的,将所有权从原始对象中移走(就像旧的auto_ptr曾经在赋值时所做的那样)。我通过在线程期间打印出std::string对象内的char数组的指针并在main中接收到它后打印指针来测试这一点。但是,指针不同。如果有人能告诉我为什么他们在这个简单的代码中不同以及代码必须是什么样子才能使它们相等,我将不胜感激:#include#include#include#include#include#include#include#includeusingnamespacestd;voidthrf