草庐IT

Pointers

全部标签

c++ - 改变指针变量的内容

在这段代码中:#includeintmain(){constchar*name="Abc";std::cout如何更改指针变量的内容,而不是它指向的内容?而且,为什么我只是得到A作为该程序的输出?谢谢。 最佳答案 你得到一个char因为你正在取消引用一个char*指针。您可以通过以下方式更改内容:*a='B';//yourchar*wouldcontain"Bbc"a[0]='B';//yourchar*wouldcontain"Bbc"a[1]='B';//yourchar*wouldcontain"ABc"a[2]='B';//

特定位大小的 C++ 指针

我的问题是关于指向奇数大小的内存块。假设我有一个像这样声明的struct:typedefstruct{int32val1:29;int32val2:26;charval3;}MyStruct;让我们假设在结构中声明特定的位字段是可取的(为什么我们要使用位字段不是问题)。如果我想声明一个指向这些字段之一的指针,我可能会尝试这样的事情:MyStructtest;int32*myPtr=&(test.val1);除了这会产生错误“不允许使用位字段的地址”。假设我们想要,有没有办法以这种方式指向这些字段?我知道C++可能会将字段填充到下一个字节(在本例中为32位)。

c++ - 在 C++ 中保存指向迭代器的指针是否安全?

我会先问问题,再问动机,最后是按预期编译和执行的说明性代码示例。问题如果我可以确保迭代器在我需要使用它的期间内不会失效,那么保存指向迭代器的指针(例如指向list::iterator的指针)是否安全。动机我有多个容器,我需要从一个容器中的项目直接交叉引用到另一个容器中的相应项目等等。一个容器中的项目可能并不总是在另一个容器中有相应的项目。因此,我的想法是将指向容器#2中元素的迭代器的指针存储在容器#1中存储的元素中,依此类推。为什么?因为一旦有了迭代器,我不仅可以访问容器#2中的元素,而且如果需要,我还可以删除容器#2中的元素等。如果容器#2中有相应的元素,我将在容器#1中的元素中存储

c++ - C++ 数组是通过引用传递还是通过指针传递?

在学校里,我们的讲师告诉我们,当我们将整个数组传递给函数时,整个数组都是通过引用传递的。不过,最近看了一本书。它说当将整个数组传递给函数时,数组默认通过pointer传递。书中进一步提到“通过指针传递与通过引用传递非常相似”,这意味着通过指针传递和通过引用传递实际上是不同的。看来不同的来源表述不同。所以我的问题是:在C++中,当我们将整个数组传递给函数时,数组是通过引用传递还是通过指针传递?例如:voidfuncA(int[]);//FunctionDeclarationintmain(){intarray[5];funcA(array);//Isarraypassedbyreforb

c++ - 如何实现 observer_ptr?

我想在我的项目中使用observer_ptr,但是paper只定义了接口(interface),没有完整的实现。有没有自己实现的简单方法? 最佳答案 您可以创建所谓的observer_ptr简单地创建一个unique_ptr使用NOP删除器。templatestructnop_deleter{voidoperator()(T*)const{}};templateusingobserver_ptr=unique_ptr;这仍然会有unique_ptr的行为,意味着它只能移动,而你想要observer_ptr可复制。这使我们实现了更简单

C++:int x[+30] 是有效的声明吗?

这几天一直在研究数组。我以这种方式遇到了一个数组的声明和它的元素的初始化:intx[+30];x[+1]=0;这让我有点困惑。我有一个想法,当我们写的时候:x[n]=0;那么它的意思是:*(x+n)=0;然后写x[+1]将意味着*(x++1)这似乎是无效的。请纠正我在理解这个概念时所犯的错误。 最佳答案 x[n]表示*((x)+(n))(注意黑色)和x[+1]表示*((x)+(+1))。这是有效的。N33375.2.1订阅TheexpressionE1[E2]isidentical(bydefinition)to*((E1)+(E2

c++ - 指向 int 的指针。 C++

我需要将函数指针传递给int。现在,如果我想通过5,我会这样做:int*i=NULL;intb=5;i=&b;有没有更好的方法可以写得更短一些?我想将iint中的字节传递给此函数:voidWrite2Asm(void*pxAddress,BYTE*MyBytes,intsize) 最佳答案 您可以将&b传递给函数;不需要中间指针变量。 关于c++-指向int的指针。C++,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - C++中的指针递增

这是什么意思:指针增量指向指针的下一个基类型的地址?例如:p1++;//p1isapointertoanint这个语句是否意味着p1指向的地址应该更改为下一个int的地址,或者它应该只增加2(假设一个int是2个字节),在这种情况下,特定地址可能不包含int?我的意思是,如果p1是0x442012,那么p1++会是0x442014(它可能是double地址的一部分)还是会指向下一个int是像0x44201F这样的地址吗?谢谢 最佳答案 指针算法不关心指针对象的内容或有效性。它将使用以下公式简单地增加指针地址:new_value=re

c++ - 在类中存储指针或对象?

只是一个设计/优化问题。什么时候存储指针或对象,为什么?例如,我相信这两种方法都有效(除非出现编译错误):classA{std::unique_ptrobject_ptr;};A::A():object_ptr(newObject()){}classB{Objectobject;};B::B():object(Object()){}我相信在堆栈或堆上实例化时会出现一个区别?例如:intmain(){std::unique_ptra_ptr;std::unique_ptrb_ptr;a_ptr=newA();//(*object_ptr)onheap,(*a_ptr)onheap?b_p

c++ - 指向结构的指针 vector

以下程序对我来说看起来还不错。但我无法编译它。#include#includeusingnamespacestd;intmain(){structa{inti;intj;};std::vectorvecA;a*pA=newa;pA->i=4;pA->j=9;vecA.push_back(pA);return0;}它会产生以下错误。struct_update.cc:Infunction‘intmain()’:struct_update.cc:32:19:error:templateargumentfor‘templateclassstd::allocator’useslocaltype‘