草庐IT

Pointers

全部标签

所有指针的 C++ 模板和所有数组的模板

我正在寻找以下问题的解决方案:我有一个类,我想在其中为所有类型的指针和所有类型的指针重载运算符(在本例中为&)阵列。在数组的实现中,我需要访问arraysize,在指针的实现中,我必须能够对取消引用的对象执行某些操作。正如指出的那样here,数组的方式很清楚:templatevoidoperator&(T(&arr)[N]){cout但对于指针来说,以下都不起作用://ifIusethis,theoperatorgetsambigousforarraystemplateinlinevoidoperator&(T*p){cout是否有任何好的和干净的解决方案来实现运算符对任意数组和任意指

c++ - 如何将成员函数指针传递给采用常规函数指针的函数?

我有一个播放器类,看起来像这样(精简到这个问题所需的内容):classPlayer{public:Player();~Player();voidkill();voiddeath();voidreset();};kill()、death()和reset()函数如下所示:voidPlayer::kill(){void(*dPtr)()=&death;Game::idle(dPtr,48);}voidPlayer::death(){reset();}voidPlayer::reset(){//resets}idle函数是Game的一个静态成员函数,它接受一个函数指针和一个整数n,并在ntic

C++ 读取内存地址/指针和偏移量

所以,我已经将一个DLL注入(inject)到一个进程(一个游戏)中,以便我可以从进程内存中读取。我想获取当前的游戏时间,我已经使用CheatEngine找到了它的静态基地址和偏移量:"游戏.exe"+0158069C偏移量:14这是我试图获取浮点值(当前游戏计时器)的代码://Offsets#defineBASETIME0x158069C#defineOFFSET0x14voidCurrentTime(){float*time;DWORD*BaseAddress=(DWORD*)GetModuleHandle(NULL);DWORD*BaseTimeAddress=(DWORD*)(

c++ - 了解堆栈、堆和内存管理

int*ip=newint[10];for(inti=0;i上面的代码是我试图用来了解堆栈和堆的测试函数的一小段。我不完全确定正确的顺序是什么。这是我目前所拥有的:当创建指针ip时,它指向由于"new"声明而在堆上创建的大小为10的新int数组。0-9从0-9加入到数组中。指针现在传递给myfun,这意味着myfun有一个指向堆上相同内存空间的指针。delete[]ip;删除堆上分配给ip指针的内存。传递给myFun的指针现在指向任何内容。一旦函数完成,ip变量将被删除,因为它只是函数的本地变量。是否有人能够澄清我是否正确并纠正我哪里出错了?此外,如果我在那之后尝试继续使用ip,它会不

c++ - 内置数组类型的开始和结束函数

我正在尝试获取C风格字符串数组(指向char的指针数组)的开始指针和结束指针。为什么我不能调用begin和end函数来获取它们?#include#includeintmain(intargc,char*argv[]){char**first=std::begin(argv),**last=std::end(argv);}编译器说我调用begin(char**&)没有匹配的函数 最佳答案 函数应用于数组。至于参数argv那么它实际上具有类型char**因为按值传递的数组被转换为指向其第一个元素的指针,并且参数也被调整为指针。你可以简单

c++ - std::function 签名指针 vs 指针引用 = 没有区别?

这是代码示例:#include#includestructFoo{};typedefboolfunc_type(Foo*&,conststd::string&);typedefstd::functionFunctionalType;boolf(Foo*,conststd::string&){}intmain(){#if1func_type*func;func=f;#elseFunctionalTypef2;f2=f;#endif}如您所见,我已将“对指针的引用”声明为第一个参数的函数类型Foo*&,我希望该函数仅以“指针”作为第一个参数Foo*不能分配给这种类型的变量。#if1regi

c++ - 转置矩阵的内存黑客破坏堆栈,C++

我需要用C++实现一个矩阵转置过程。问题是签名,函数必须这样调用:transpose(in_mat[0][0],n,m,out_mat[0][0])其中n和m是维度。所有值都是double值,包括矩阵和维度。由于代码是自动生成的,我无法解决这个问题。我的解决方法是这样的:voidtranspose(double&in_mat,constdouble_n,constdouble_m,double&out_mat){intn=_n,m=_m;double*in_pointer=&in_mat;double*out_pointer=&out_mat;for(inti=0;i它工作正常。我用两

c++ - 如何访问 std::vector 类型的成员

我的程序有一个计算总和的函数,为此我需要访问vector中对象的属性:vector声明:classtrilateration{public:...std::vector*potential;...};然后在构造函数中对其进行初始化:trilateration::trilateration(){...potential=newstd::vector();...}类(class)提示如下所示:classtip{public:doublesum;Point2d*pt;tip();tip(doublex,doubley);virtual~tip();};提示构造函数:tip::tip(doub

c++ - 为什么这会在 const 方法中返回一个 const X* const 指针?

我在理解以下错误时遇到了麻烦:Error1errorC2440:'=':cannotconvertfrom'constX*const'to'X*const'我正在尝试使用指向const指针的指针在树遍历期间跟踪节点:boolIsValid()const{X*const*previousNode=newX*;returnthis->IsValid(previousNode);}boolIsValid(X*const*previousNode)const{...if(!*previousNode)*previousNode=this;//Error...returntrue;}为什么thi

c++ - 数组指针的增量

我试图理解为什么以下C++代码无法编译intmain(){inta[10];int(*p)[10]=&a;int*q=static_cast(++p);}如果不是很明显,我尝试做的是使用指针算法找到指向数组末尾的指针。到目前为止,我的理解是p具有指向十个整数数组的类型指针,表达式++p也是如此。通常,我可以将一个int数组分配给一个指向int的指针类型的变量,但这在递增的指针++p上失败了。我第一次尝试不使用static_cast但那也没有用。 最佳答案 phastypepointertoarrayoftenints这是正确的。No