草庐IT

Pointers

全部标签

c++ - 是否可以定义指向引用的指针?

我正在阅读C++Primer,我注意到有一句话说:Becausereferencesarenotobjects,theydon'thaveaddresses.Hence,wemaynotdefineapointertoareference.但我只是写了一个示例代码并表明可以创建一个指向引用的指针(d变量)。代码贴在下面:#includeusingnamespacestd;intmain(){inta=1024;int&b=a;//areferencetointint&c=b;//areferencetoanotherreferenceint*d=&b;//apointertoarefe

c++ - 为什么C++中没有 "NULL reference"?

我正在阅读C++常见问题解答-“8.6-WhenshouldIusereferences,andwhenshouldIusepointers?”,尤其是以下声明:Usereferenceswhenyoucan,andpointerswhenyouhaveto....Theexceptiontotheaboveiswhereafunction'sparameterorreturnvalueneedsa"sentinel"reference—areferencethatdoesnotrefertoanobject.Thisisusuallybestdonebyreturning/takin

C++ 指针的打印值给出了奇怪的结果

当我编译并运行此C++代码时,我没有得到预期的输出。#includeusingnamespacestd;intmain(){int*i=newint;long*l=newlong;char*c=newchar[100];float*f=newfloat[100];cout在unix机器上我得到i0x967f008l0x967f018cf0x967f090在Windows机器上,c的值打印为一行随机字符。请有人解释为什么它没有正确打印char数组的指针。谢谢 最佳答案 operator对于std::ostream和std::wostr

没有指针或引用的c++虚函数调用

据我所知,虚函数调用通常需要指针或引用。所以我对下面的代码感到非常惊讶。#includeusingnamespacestd;classB{public:voidrunB(){call();}virtualvoidcall(){cout输出是D有人可以评论为什么这个虚函数调用有效吗?谢谢。 最佳答案 在成员函数内,任何对其他成员函数或变量的引用都通过this指针隐式解析。所以在runB()的定义中,call()实际上意味着this->call()。虚函数调用是使用当前对象的虚表执行的。 关

c++ - 返回指向函数中声明的数据的指针

我知道这行不通,因为变量x在函数返回时被销毁了:int*myFunction(){intx=4;return&x;}那么我如何正确地返回一个指向我在函数中创建的东西的指针,我需要注意什么?如何避免内存泄漏?我也用过malloc:int*myFunction2(){int*x=(int*)malloc(sizeofint);*x=4;returnx;}你如何正确地做到这一点-在C和C++中? 最佳答案 对于C++,您可以使用智能指针强制执行所有权转移。auto_ptr或boost::shared_ptr是不错的选择。

c++ - 当 vector 需要更多内存并分配内存时,指针会发生什么变化?

当vector需要更多内存时,它会在某处重新分配内存,我还不知道在哪里!然后指针变得无效,对此有什么好的解释吗?我的意思是它们去了哪里,我的容器会怎样?(不是链表的) 最佳答案 简短回答:一切都会好起来的。别担心,回去工作吧。中等答案:向vector添加元素或从vector中移除元素会使所有迭代器和引用/指针无效(可能除了从后面移除之外)。就那么简单。不要引用任何旧的迭代器并在这样的操作之后获取新的迭代器。示例:std::vectorv=get_vector();int&a=v[6];int*b=&v[7];std::vector:

c++ - 使用整数指针操作时如何确定整数数组的结尾?

代码如下:intmyInt[]={1,2,3,4,5};int*myIntPtr=&myInt[0];while(*myIntPtr!=NULL){cout..........对于字符数组:(因为我们在末尾有一个NULL字符,所以在迭代时没有问题)charmyChar[]={'A','B','C','D','E','\0'};char*myCharPtr=&myChar[0];while(*myCharPtr!=NULL){cout我的问题是因为我们说要添加NULL字符作为字符串的末尾,所以我们排除了此类问题!如果以防万一,规则是将0添加到整数数组的末尾,我们就可以避免这个问题。怎么说

c++ - 悬挂引用。悬挂指针和引用的替代方案?

以下代码产生悬挂引用:intmain(){int*myArray=newint[2]{100,200};int&ref=myArray[0];delete[]myArray;cout我知道我不应该删除数组,但是在大型程序中,如果有人删除了我引用的内存怎么办?能否以某种方式确保没有人删除数组?防止悬挂引用和悬挂指针的最佳策略是什么? 最佳答案 在完成内存之前不要删除它。听起来很愚蠢,但这是您唯一的保护措施-正确了解谁拥有每个变量背后的内存,以及何时可以安全地释放它。智能指针可以提供帮助,但上述内容仍然适用。有可能一些静态分析工具可以识

c++ - 函数参数 : Copy or pointer?

我是C++的新手,有一些问题,这就是其中之一。当你使用一个接受一个或多个参数的函数时,你知道这些参数在函数调用之前总是存储在一个变量中,是否有任何原因传递变量的拷贝,而不是指针到变量?我说的是性能。在我看来,传递整个结构的拷贝比仅仅传递一个指针(4字节)需要更多的资源。 最佳答案 有几种方法可以使传递拷贝比传递指针成本更低。对象等于或小于指针。直接访问值总是比取消引用指针更快。该结构足够小,可以由编译器放入堆栈。在这种情况下,对结构中值的访问是通过索引寻址模式而不是间接索引寻址模式完成的。前者通常更快。想要传递拷贝而不是引用还有其他

c++ - 在 C++ 中从现有数组创建子数组的最佳方法是什么?

好的,我正在尝试从现有数组中获取子数组,但我只是不确定该怎么做。在我的示例中,我有一个非常大的数组,但我想从数组的最后5个元素创建一个数组。我正在谈论的一个例子是:intarray1={1,2,3,...99,100};intarray2[5]=array1+95;我知道这是不正确的,但我在正确处理时遇到了一些麻烦。我想获取array1中96到100的元素并将它们放入array2但我不想复制数组。我只希望array2从96元素开始,这样array1[96]和array2[0]将指向相同的位置。 最佳答案 为此:"suchthatar