草庐IT

Pointers

全部标签

c++ - 如何使指针指向二维数组的任意数组元素?

开门见山我希望字符指针p指向唯一包含字符“T”的数组元素。chara[100][100];char*p;for(inti=0;i附言我尝试了*、**等的各种组合,但似乎没有任何效果。 最佳答案 使用它的地址:chara[100][100];char*p;for(inti=0;ia[i][j]是char类型,p是char*类型,它拥有一个地址。要获取变量的地址,请在其前面加上&。指针上的*运算符以相反的方式工作。如果您想取回'T',您可以使用:chartheT=*p; 关于c++-如何使指

c++ - 数组衰减到指针和重载解析

我希望能够在重载决策中区分数组和指针:classstring{public:string(constchar*c_str);templatestring(constchar(&str)[N]);};intmain(){constchar*c_str="foo";stringfoo(c_str);//okwillcallstring(constchar*)stringbar("bar");//callstring(constchar*)insteadofthearrayversion}到目前为止我发现的最好的方法是使用对指针的引用而不是指针:classstring{public:stri

C/C++ 中的 C++ 引用和常量指针

最近,当我向某人解释指针和引用(在C++编程的上下文中)之间的基本区别时,我告诉了通常的解释,这些解释讨论了不同的函数参数传递约定——按值调用、按指针调用、按引用调用,以及所有关于引用的相关理论。但后来我想到无论C+引用在参数传递方面做了什么,(允许一种传递大型结构/对象的内存有效方式,同时通过不允许被调用者修改传递的对象的任何变量来保证它的安全作为引用,如果我们的设计需要的话)C中的const指针可以实现相同的目的,例如如果需要传递结构指针,比如structmystr*ptr,通过将结构指针强制转换为常量-func(int,int,(conststructmystr*)(ptr));

c++ - STL 迭代器上下文中的奇异值和非奇异值是什么?

C++标准(2003)的第24.1/5节内容如下:Justasaregularpointertoanarrayguaranteesthatthereisapointervaluepointingpastthelastelementofthearray,soforanyiteratortypethereisaniteratorvaluethatpointspastthelastelementofacorrespondingcontainer.Thesevaluesarecalledpast-the-endvalues.Valuesofaniteratoriforwhichtheexpre

c++ - 函数指针的现代 C++ 替代品

到目前为止我一直在使用函数指针,就像c++中的这种格式。我现在确实有一些用途,我想知道c++11/14中是否引入了其他任何替代方案。#includeusingnamespacestd;voidsayHello();voidsomeFunction(voidf());intmain(){someFunction(sayHello);return0;}voidsayHello(){std::cout我确实看过这个question但无法理解与传统使用函数指针相比​​有什么优势。另外我想问一下,使用函数指针有什么问题(不推荐)吗,因为我从未见过有人使用它们。或任何其他替代礼物。

c++ - 编写深拷贝 - 复制指针值

在为包含指向动态分配内存的指针的类编写复制构造函数时,我有一个问题。如何指定我希望将复制自对象的指针值复制到复制对象的指针。显然这样的事情是行不通的......*foo=*bar.foo;因为,bar对象正在被删除(首先复制对象的目的),而这只是将复制到对象的foo指向同一个地方。这里的解决方案是什么?如何获取动态分配内存的值,并将其复制到不同的地址? 最佳答案 分配新对象classFoo{Foo(constFoo&other){//deepcopyp=newint(*other.p);//shallowcopy(theybothp

c++ - 从原始指针创建 weak_ptr<>

我想将原始指针成员包装到一些智能指针,以防止在开发类中删除。指针下对象的所有者在类之外。所以,看起来像boost::shared_ptr和std::auto_ptr不适合。以下是简化的示例:classFoo{boost::weak_ptrm_bar;public:voidsetBar(constBar*bar){//barcreatedonheapm_bar=bar;//naturallycompilationerror}};当然会导致编译错误。从原始指针(如果存在)初始化weak_ptr的正确方法是什么? 最佳答案 你不能那样做,

c++ - 如何将 char* 指针转换为 C++ 字符串?

我有一个C++string。我需要将此字符串传递给接受char*参数的函数(例如-strchr())。a)我如何获得该指针?b)是否有一些等同于strschr()的函数适用于C++字符串? 最佳答案 获取C字符串等价于C++string对象使用c_str函数。定位第一次出现的achar在string对象中使用find_first_of功能。例子:strings="abc";//calltostrlenexpectschar*cout注意:我给出的strlen只是一个采用char*的函数示例。

c++ - 为什么 std::accumulate 对于标准数组会有这样的行为?

我刚接触C++,我想我已经掌握了指针,但是std::accumulate()让我感到困惑。给定数组:inta[3]={5,6,7};我想用std::accumulate()对数组的值求和,所以我向它传递了一个指向第一个元素的指针,然后是最后一个元素,然后是蓄能器。std::accumulate(a,a+2,0);std::accumulate(&a[0],&a[2],0);糟糕:其中任何一个只返回前两个元素的总和:11。另一方面,如果第二个参数是一个无意义的指针,就超出了范围......std::accumulate(a,a+3,0);std::accumulate(&a[0],&a[

c++ - C++ 中的多重间接寻址有什么用?

在什么情况下您可能希望在C++中使用多重间接寻址(即Foo**中的指针链)? 最佳答案 正如@aku指出的,最常见的用法是允许在函数返回后对指针参数的更改可见。#includeusingnamespacestd;structFoo{inta;};voidCreateFoo(Foo**p){*p=newFoo();(*p)->a=12;}intmain(intargc,char*argv[]){Foo*p=NULL;CreateFoo(&p);couta这将打印12但还有其他一些有用的用法,如以下示例所示,用于迭代字符串数组并将它们打