草庐IT

Pointers

全部标签

c++ - 返回一个指针

我不明白这个例子是如何工作的:double*GetSalary(){doublesalary=26.48;return&salary;}main(){coutsalary是GetSalary()中的局部变量,因此从函数返回后,此单元格可能会被另一个函数覆盖。我看不出如何返回指向局部变量(未在堆上实例化)的指针。 最佳答案 这是行不通的。这是未定义的行为。它可能看起来有效,因为“正确的行为”是“任何可能的行为”的一个子集。 关于c++-返回一个指针,我们在StackOverflow上找到一

C++ 函数参数将指针的地址作为参数。这是如何使用的?它是做什么用的?

想象这样一个函数:function(Human*&human){//Implementation}你能解释一下*&到底是什么吗?它的用途是什么?与仅传递指针或引用有何不同?你能给出一个小的解释性样本吗?谢谢。 最佳答案 它就像一个双指针。您通过引用传递指针,允许“函数”函数修改指针的值。例如,“human”可以指向Jeff,函数可以修改它以指向Ann。Humanann("Ann");voidfunction(Human*&human){human=&ann;}intmain(){Humanjeff("Jeff");Human*p=&

c++ - 为什么我们需要为指针放置 *

我在阅读有关指针的内容时突然想到,如果指针只是一个存储变量内存地址的变量,那么每个整数都应该用作指针。然后我创建了一个小程序,它发出警告但不知何故起作用了。intmain(){inti,j;i=3;j=&i;printf("%d\n%d\n%d",i,j,&i);return0;}输出是316064166001606416600那么,如果正常的int就可以工作,为什么还要放一个额外的*呢?另一个问题是关于下面程序的输出intmain(){inta[]={1,2,3,4,5,6,7};int*i,*j;i=&a[1];j=&a[5];printf("%d\n%d\n%d",j,i,j-i

c++ - 了解 C++ 中的声明

我正在通过简单的步骤阅读C++,遇到了一段我不理解的引用和指针代码。代码是void(*fn)(int&a,int*b)=add;。据我所知,它不会影响程序本身,但想知道这段代码的作用。#includeusingnamespacestd;voidadd(int&a,int*b){cout 最佳答案 使用螺旋法则:+----------------------+|+--+||^||void(*fn)(int&a,int*b)=add;^||||+-----+|+---------------------------+fn是一个指向带有两

C++:我可以使用指针超出应用程序内存的范围吗?

如果我有这样一些愚蠢的代码:intnBlah=123;int*pnBlah=&nBlah;pnBlah+=80000;*pnBlah=65;我可以更改另一个应用程序的内存吗?你已经向我解释了这是邪恶的,我知道。但我只是感兴趣。这不是简单尝试的事情。我不知道会发生什么。谢谢 最佳答案 在C++术语中,这是未定义的行为。实际发生的情况取决于许多因素,但最重要的是取决于您使用的操作系统(OS)。在现代内存管理的操作系统上,您的应用程序将因尝试访问进程地址空间之外的内存而因“段错误”(实际术语取决于操作系统)而终止。然而,一些操作系统没有这

c++ - C++ 中的 Iterator 不是一种指针吗?

好的,这次我决定使用STL制作一个列表。我需要为每个客户端创建一个专用的TCP套接字。因此,每次建立连接时,我都会实例化一个套接字并在列表中添加一个指向它的指针。listSocketList;//Thisisthelistofpointerstosocketslist::iteratorit;//AniteratortothelistofpointerstoTCPsockets.将新指针放入套接字很容易,但现在每次连接结束时我都应该断开套接字并删除指针,这样我就不会发生巨大的内存泄漏,对吧?好吧..我认为通过设置这个我做得很好:it=SocketList.begin();while(i

c++ - 指针中(星号)的确切用途是什么?

我是编程新手,我正在努力思考“指针”的概念。intmain(){intx=5;int*pointerToInteger=&x;cout为什么当我cout输出是一个十六进制值,但是当我使用cout时输出为5(x=5)。 最佳答案 *根据上下文有不同的含义。指针声明int*ap;//Itdefinesaptobeapointertoanint.voidfoo(int*p);//Declaresfunctionfoo.//fooexpectsapointertoanintasanargument.取消引用表达式中的指针。inti=0;in

c++ - 为什么我在声明中说 int *p = NULL ,但在测试中说 p != NULL ,为什么 *p != NULL 不匹配声明?

在C++中,如果我们将指针值赋给NULL,为什么不要我们检查*p!=NULL而不是p!=NULL?我在教程中找到了这段代码。int*p=NULL;char*q=NULL;//...if(p!=NULL)cout提前致谢 最佳答案 *正在做两件不同的事情。当您声明变量时,这意味着该变量是一个指针。当您使用变量时,它意味着“取消引用”,即获取指针指向的位置的值。两种完全不同的含义。 关于c++-为什么我在声明中说int*p=NULL,但在测试中说p!=NULL,为什么*p!=NULL不匹配声

c++ - C++ 新手。关于常量指针的问题

我正在尝试通过一些网络教程学习C++。我没有可用的编译器,否则我会尝试一下。我不确定const指针是什么意思。这是否意味着它总是指向相同的内存地址?为什么你会想要那样做?以下代码是否合法?...int*constaPointer=newint;...//dosomethingwithaPointerdeleteaPointer;...//dosomethingelse,includingpossiblymore'new'statementsaPointer=newint;... 最佳答案 记住const如何与指针一起使用的一个简单方

C++ std::vector 的指针删除和段错误

我有一个指向类的指针vector。我需要调用它们的析构函数并释放它们的内存。因为它们是指针vector。clear()不能完成这项工作。所以我继续像这样手动完成它:voidPopulation::clearPool(std::vectora,intsize){Chromosome*c;for(intj=0;j那里的printf是因为我有一个会说话的析构函数来查看段错误发生在哪个染色体上。当调用clearPool()并说我们得到的大小为100时,它会在0到100之间的任何染色体中给出段错误。我不知道为什么会发生这种情况,也没有办法真正找出问题所在,因为在使用断点进行调试时,我所看到的只是