草庐IT

$双指针

全部标签

c++ - 为什么 new 关键字返回指针而不是引用?

我知道new关键字返回指针,所以返回类型是void*。我的愚蠢问题是,为什么new必须返回void*而不是void&?意思是当对象由new创建时,他们可以使用&运算符的地址返回该对象的地址。我知道指针和引用之间的区别。但最后我们使用指针而不是引用。请消除我的困惑谢谢。 最佳答案 New返回一个你用来在内存中分配空间的任何类型的指针,而不是void*autop1=newint[5];//returnsapointertoanintpointingtothe1stelementautop2=newshort[5];//returnsap

c++ - 指针初始化

在下面的代码中:chardata[128]="JustATest\0";char*cTest2=data;char*cTest3=&data[0];cTest2和cTest3有什么区别?您什么时候会使用一种初始化方法而不是另一种方法? 最佳答案 没有区别;因为一个体面的编译器会产生相同的代码,您可以根据个人喜好使用。 关于c++-指针初始化,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

c++ - 将指向类成员的指针作为模板参数传递

我想编写一个函数,将进程应用于类的成员。以下代码有效:classAA{public:AA(){};~AA(){};std::stringtype="AA";};classBB{public:BB(){};~BB(){};templatevoidtest(T&a,TT(T::*memberPtr)){std::cout但是我知道编译时的一切所以我想知道是否有可能写一些等效的东西但只用模板?所以我可以这样写:b.test(a);在测试中调用(a):std::cout或类似的东西。 最佳答案 你不能只做test,因为您还需要告诉函数模板您

c++ - 指向字符串和字符的指针捕获 22

我正在研究指针,当我看到char*p[10]时,我卡住了。因为有些事情被误解了。谁能一步步、一针见血地解释为什么我的逻辑是错误的,错误是什么,我认为哪里错了,我应该怎么想。因为我想准确地学习。还有int*p[10];呢?此外,例如x是指向char的指针,但只是char而不是chars。但是怎么会char*x="possible";我认为上面一个应该是正确的但是,我看到了char*name[]={"nomonth","jan","feb"};我真的很困惑。 最佳答案 您的char*p[10]图显示了一个数组,其中每个元素指向一个字符。

c++ - 如何根据指针与非指针类型重载成员函数

鉴于以下情况:templateclassWhatever{public:Whatever(T&&t):_t(std::move(t)){}private:T_t;};当T是指针类型时,我需要检查构造函数的targ是否为-1(不要问),并在将其分配给_t之前将其更改为nullptr。换句话说,我需要为指针类型重载此构造函数。有人知道这是否可行吗?注意:即使我将类部分特化为指针类型,我也希望该类尽可能从上面的类本身继承(因为除此之外这两个类的行为是相同的),但不知道是否那是可能的。任何帮助,将不胜感激。谢谢。 最佳答案 您可以使用标记分

c++ - 如果我将指针设置为 NULL,则两次释放同一指针不会出错

我尝试两次释放同一个指针,但都失败了,但如果我按照相同的步骤而不将其设为NULL,代码运行正常。#includestructMyClass{MyClass(){std::cout我看到问题的一个很好的答案WhathappenswhenyoudeallocateapointertwiceormoreinC++?但是如果我将它设为NULL,是什么让它运行,这两种情况不应该遵循相同的行为? 最佳答案 你只需要释放你分配的东西。您使用new[]分配了五个MyClass实例。所以这就是您需要解除分配的内容。您没有释放任何指针。指针不需要被释放

c++ - 为什么这行得通? [C++;空指针]

我以为我做了一些愚蠢的事情——至少我是这么认为的。我的问题是:为什么这样做有效?templateclassyarray{public:yarray(){pContainer=newT[1];//initializeasarraywithsize1unCount=0U;//counter}~yarray(){delete[]pContainer;//cleanuppContainer=nullptr;}voidpush_back(Tdata){((T*)pContainer)[unCount]=data;//set(shouldn'titthrowanexceptionwhenunCou

c++ - 数组上的指针运算

当我运行下面的代码时,我的输出不是我所期望的。我的理解是ptr指向Str数组第一个元素的地址。我认为ptr+5应该指向第+5个元素,即f。所以输出应该只显示f而不是同时显示fg。为什么显示fg?它与cout显示数组的方式有关吗?#includeusingnamespacestd;intmain(){char*ptr;charStr[]="abcdefg";ptr=Str;ptr+=5;cout预期输出:f实际输出:fg 最佳答案 当你声明时:charStr[]="abcdefg"字符串abcdefg与一个额外的字符\0一起隐式存储,

c++ - C++中动态数组的长度信息是关联指针还是首元素地址?

例如:int*a,*b;a=newint[10];b=newint(12);b=a;//Iknowthere'smemoryleak,butlet'signoreitfirstdelete[]b;//lineL会发生什么?是否会删除整个数组成功?如果L行被替换为:b=a+1;删除[]b;或者通过这个:一个++;删除[]一个;最后,如果动态数组的长度与起始地址相关联,或者换句话说,与数组本身相关联,我们是否有任何方法可以在不使用另一个变量来存储它的情况下获取它的长度长度?非常感谢! 最佳答案 内存块大小和数组长度信息与对象的地址相关联

c++ - 为什么可以将整数值赋给未初始化的指针

当我这样做时,它完美地打印出“2”。intmain(){int*p;intx=2;*p=x;cout但是当我第一次将*p初始化为null时,程序崩溃了。intmain(){int*p=0;intx=2;*p=x;cout我想问一下,第一个程序竟然能成功运行在第一位,为什么可以给一个未初始化的指针赋值?[编辑]我的问题实际上与我得到的这个过去的考试问题有关。您可以勾选多个答案,似乎(b)和(c)都是正确的。但现在我知道(c)是否有效纯粹是因为运气。 最佳答案 第一个程序有未定义的行为。它似乎有效,但不幸的是,看似理智的行为也是未定义的