草庐IT

Pointers

全部标签

c++ - 我可以检查 C++ 迭代器是否为 null 吗?

我在使用vector迭代器时遇到了问题。我在一些地方读到过,检查空迭代器是不可能的,检查迭代器的常用方法是在搜索后根据vector.end()检查它。例如:vectoranimalList;vector::iteratorfindInList(consttype_info&type){//LoopthroughlistofAnimals,ifDogfound,returniteratortoit}autoit=findInList(typeid(Dog));//WithapointerIcancheckifit'snull,butwithaniteratorIhavetocheckag

c++ - 表达式必须具有指向类类型的指针

我有一个结构“MachineState”,我创建了一个“MachineState*”类型的列表。当我尝试遍历列表时,我不断得到“errorC2839:invalidreturntype'MachineState**'foroverloaded'operator->我使用的是MicrosoftVisualStudio10。我用谷歌搜索了这个错误,我所能找到的只是“->运算符必须返回一个类、结构或union,或者对它们的引用。”StructMachineState{templatefriendclassMachine;enumFacing{UP,RIGHT,DOWN,LEFT};Machi

c++ - &**this 究竟返回了什么?

这是一个指向调用对象的指针(它返回右值)。*这是一个指向调用对象指针的指针(它返回地址的值)。**这是一个指向调用对象(???)的指针的指针。&***这是对调用对象指针(???)的指针的引用。std::vector::iteratori=vector1.begin();i是指向它自己的右值的指针(返回它自己的值)。*i是vector中包含的对象的右值指针(返回&value中指向的值)。**i是指向vector中包含的对象的右值指针的指针(???)。我真的很困惑。这是一个示例代码,我们在其中找到表达式&**this:class_Iter{private:ListElem*pCurr;co

c++ - int* x[n][m] 和 int (*x) [n][m] 有什么区别?

正如我所见,int*x[n][m]将x声明为指向整数的二维指针数组,因此分配内存应为就像x[i][j]=newint一样简单,正如预期的那样,它工作正常。现在,如果我将声明更改为:int(*x)[n][m]x[i][j]=newint不再有效并导致编译错误。x=(int(*)[n][m])malloc(sizeof(int[n][m]))然而编译。从我运行的几个测试来看,在内存分配之后,不同的声明/分配组合似乎不会影响存储在变量中的值。我错过了什么吗?所以我的问题是,**int*x[n][m]和int(x)[m][n]之间有区别吗?int(x)[n][m]是如何存储在内存中的?

c++ - 指针数学与数组索引

我知道这已经被散列了很多次,但我今天遇到的一个案例动摇了我对指针数学/数组索引的理解。正如我一直理解的那样,&mybuff[10]和(&mybuff+10)是引用同一内存的等效方法。但是我花了一个上午的时间来处理一个案例:memcpy(&mybuff+10,&in,8);在启用优化编译时溢出缓冲区,在编译调试时工作正常。同时,memcpy(&mybuff[10],&in,8);在这两种情况下都工作得很好。非常感谢任何想法或指示。 最佳答案 为了示例,我将为mybuff发明一个声明:charmybuff[123];现在,&mybuff

c++ - 函数指针表达式

所以我得到了以下表达式:int(*f1(int(*a)(int,int)))(int,int);我正试图弄清它的意义,但它令人困惑。我发现“a”是一个指向带有2个参数(int,int)的函数的指针。然后f1似乎是指向另一个函数的指针,该函数接受2个int参数。但令我困惑的是f1与a的关系。谁能给我一些提示或正确解释上面的表达式在做什么? 最佳答案 它将f1声明为一个带有名为a的参数的函数。参数类型和返回类型都是“指向函数的指针,带有两个返回int的int参数”。这是你解析它的方式://f1is...f1//...afunction.

c++ - 在 C++ 中使用指针交换数组

我有两个需要交换的double指针数组。与其仅仅复制数组中的数据,不如仅交换指向数组的指针会更有效率。我一直认为数组名本质上只是指针,但以下代码收到编译器错误:doubleleft[]={1,2,3};doubleright[]={9,8,7};double*swap=left;left=right;//Error"ISOC++forbidsassignmentofarrays"right=swap;//Error"incompatibletypesinassignmentof`double*'to`double[((unsignedint)((int)numParameters))]

c++ - 从 vc++ 调用存储在堆中的代码

假设我正在做这样的事情:void*p=malloc(1000);*((char*)p)=some_opcode;*((char*)p+1)=another_opcode;//forthesakeoftheexample:theopcodesareok....etc...我怎样才能定义一个函数指针来调用p就好像它是一个函数一样?(我正在使用VC++2008Express)。谢谢 最佳答案 评论空间不足。Joe_Muc是正确的。您不应该将代码填充到通过malloc或new获得的内存中。如果您更改Windows分配的页面的页面属性,您将遇

c++ - 将 double 类型的值写入文本文件

下面的代码将不可读的字符写入文本文件:intmain(){ofstreammyfile("example.txt");if(myfile.is_open()){doublevalue=11.23444556;char*conversion=(char*)&value;strcat(conversion,"\0");myfile.write(conversion,strlen(conversion));myfile.close();}return0;}我想查看文件中写入的实际数字:(请提示。编辑看到下面的答案,我将代码修改为:intmain(){ofstreammyfile("examp

C++初学者问题: dereference vs multiply

这个问题在这里已经有了答案:What'sthemeaningof*and&whenappliedtovariablenames?(1个回答)关闭6年前。刚接触C++。当我看到乘法符号(*)被用来表示变量的取消引用时,我经常会偏离轨道例如:unsignedchar*pixels=vidgrabber.getPixels();这会让其他人失望吗?让我解决这个问题的秘诀是什么?谢谢。附注我还有另一个相当简单的问题,但没有得到回答:(此处:beginnerquestion:add/subtracttovalueratherthanjustbethatvalue非常感谢!感谢您的宝贵时间!