草庐IT

Pointers

全部标签

c++ - 2 C++中的维数组指针操作

intmain(){inta[10][10];int**ptr=(int**)a;cout这段代码在我的电脑上的输出是0021FC200021FC200021FC20CCCCCCCC为什么“a”等于“*a”?为什么*a不等于*ptr? 最佳答案 Whyisaequalto*a?当在需要指针的上下文中使用时,数组将被转换为指向其第一个元素的指针。a是数组的数组;所以它会衰减到指向第一个数组的指针。*a是第一个数组,并将衰减为指向该数组中第一个整数的指针。这两者都存在于同一位置,因此这两个指针将具有相等的值。whyisn't*aequa

c++ - QSharedPointer,如何传递它们,我需要它们吗?

这几天一直在尝试理解共享指针,但感觉我似乎无法理解。不确定是不是太明显了还是太复杂了。首先,谁能给我一个实际使用共享指针的例子。维基百科上的例子对我来说毫无意义。以及如何将共享指针传递给另一个函数或创建具有共享指针的对象。那么,您如何传递它以及您将在哪里使用它?任何信息或示例都会很棒。另外,我有这个问题,我不知道该用什么。我有这个功能,我分配一个QFile并将其传递给另一个类中的函数。该函数将文件作为QIODevice*然后创建一个包含该文件的对象。我想知道这里最好的解决方案是什么以及如何(如果我应该)在这里使用共享指针?如何使用创建共享指针并将其传递到函数采用的位置.感觉我根本没有得

不提供模板参数的 C++ 类指针

你好亲爱的地下世界的人们称为互联网。假设我们有一个名为X的类,带有模板参数(Y):templateclassX{//...};我想创建一个没有(还没有)模板参数的类的实例,然后用模板参数定义指针:X*myClass;//....myClass=newX();这有可能吗? 最佳答案 X不是没有模板参数的类型,所以不,不幸的是不是。如果X有一个定义了您想要使用的接口(interface)的基类,您就可以实现您想要的。例如,structInterface{Interface(){}virtual~Interface(){}virtualv

c++ - 从基类识别派生类

有什么方法可以检查两个实例是否是同一个派生类?像这样的东西:Base*inst1=newA();Base*inst2=newB();Base*inst3=newA();boolb1=(inst1->class==inst2->class);//class==inst3->class);//显然我可以只向基类添加一个虚函数并实现每个派生类以返回一个唯一值。但是,我宁愿不必为派生类实现任何特定的东西,因为我正在制作一个基于派生自这个基类的API。 最佳答案 typeid(*inst1)==typeid(*inst2)假设Base至少有一

c++ - 指向单个位的 C/C++ 指针类型?

我想修改单个数据位(例如int或char)。我想通过制作一个指针来做到这一点,比如ptr。通过将它分配给一些int或char,然后在递增ptrn次之后,我想访问该数据的第n位。有点像//Ifiwanttochangeallthe8bitsinacharvariablecharc="A";T*ptr=&c;//TisthedatatypeofpointerIwant..intindex=0;for(index;index 最佳答案 C++中没有位指针这样的东西。您需要使用两个东西,一个字节指针和该位的偏移量。这似乎是您在代码中的目标。

c++ - C++ vtables中的双重间接

我编写了这个非常简单的C++程序,我想知道为什么编译器将vtable布局为跨越两个指针取消引用。这是C++程序:classFoo{public:virtualvoidbar(){}};intmain(intargc,char*arv[]){Foofoo;Foo*foo_p(&foo);foo_p->bar();}现在,我可以查看编译器生成的程序集:$g++-ggdb-Wall-O0-Stest.cpp以下是相关部分:.loc190leaq-16(%rbp),%rax#puttheaddressof'foo'in%raxmovq%rax,%rdi#useitasthefirstargum

c++ - 使用基于范围的 For 循环和 Char 指针字符串

这个问题在这里已经有了答案:Rangebasedforloopsonnullterminatedstrings(3个答案)关闭9年前。我是C++11的新手,坦率地说,我已经一年多没用过C++,所以一开始我有点生疏。我正在根据旧的大学教科书做一些练习,在尝试迭代char指针字符串时遇到了问题(例如:char*c="astring";)。我在谷歌上找不到任何有用的东西。我已经习惯了Java,其中foreach循环可以遍历任何集合。我知道指针是如何工作的,但是我从C++休假让我对实际使用它们的语法一无所知。谁能告诉我为什么以下代码(特别是convert()函数)会导致编译错误,其中“开始”和

c++ - 指向指针数组的指针!如何删除?

所以我有一个指向指针数组的指针!int**matrixPtr;matrixPtr=newint*[5];for(i=0;i我想知道这是否是释放内存的正确方法!for(i=0;i谢谢! 最佳答案 没问题。这是正确的!您以与分配相反的顺序解除分配!我什至认为没有其他方法可以做到这一点。 关于c++-指向指针数组的指针!如何删除?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1871

c++ - 将 const uint * 的值复制到 C++ 中的另一个变量

我想我有一个普遍的问题。我目前正在学习C++和SDL2.0。SDL提供了一个函数,该函数返回一个指向包含所有键状态的constuint*的指针。这些是我想使用的变量:constUint8*oldKeyState;constUint8*currentKeyState;在构建我的input.cpp时:currentKeyState=SDL_GetKeyboardState(&this->length);oldKeyState=currentKeyState;在我使用的Update()方法中:oldKeyState=currentKeyState;currentKeyState=SDL_Ge

c++ - 澄清智能指针的 operator* 和 operator-> 重载

自从我使用C++以来它已经通过了很多,所以这里是(可能是愚蠢的)问题:一个基本的智能指针对象应该表现得像一个普通的指针对象,所以在典型的实现中,我们向对象添加*和->运算符,就像这样:templateclassauto_ptr{T*ptr;public:explicitauto_ptr(T*p=0):ptr(p){}~auto_ptr(){deleteptr;}T&operator*(){return*ptr;}T*operator->(){returnptr;}//...};现在,据我所知,c++*运算符(取消引用)代表:“通过ptr的值获取堆中指向的值”(对吗?),以及类型*ptr