草庐IT

Pointers

全部标签

c++ - 何时在游戏开发中使用 C++ 指针

我看过很多文章,大多数都讲了同一个故事:除非万不得已,否则不要使用指针。来自C#/Java背景,其中内存全部被管理,我完全不知道什么时候适合使用指针,除了这些情况:动态内存(如可变大小数组)多态性还有什么时候我会使用指针,尤其是在gamedev的上下文中? 最佳答案 “不要使用指针,它们很慢”没有意义(至少在C++中没有)。这就像在说,“不要使用变量,它们很慢”。您是说“不要使用动态内存分配”吗?如果是这样:我认为你现在不应该担心它。先写代码,再优化。或者您的意思是说,“不要使用原始指针(即类型foo*)”,这需要new和删除?如果

c++ - (C++ 内存管理)如果我们有一个 int x = 1234,并且 int &y = x... 那么 y 在堆栈上的地址是什么?

我们正在为星期二的CS期中学习。我们的教授将一些学习Material放到网上,包括以下内容:“此外,您应该能够根据一些代码绘制内存图,例如:”voidfoo(int&x){x=1000;}voidbar(int*x){*x=1000;}voidfoobar(intx){x=1000;}intmain(){intx=1234;int&y=x;int*z=&x;intarray_1[5];int*array_2[5];array_1[0]=10;array_2[0]=(int*)10;array_2[1]=&y;array_2[2]=&x;foo(x);foo(y);foo(*z);bar

c++ - 为指针格式化 cout

我想将这些C代码转换为C++代码。关于指针printfintn=44;//printf("n=%d\t&n=%x\n",n,&n);cout当我运行printf输出时是这样的:n=44&n=22ff1c但是当我运行cout输出时是这样的:n=44&n=22ff0c为什么两个版本输出的地址n的值不同? 最佳答案 编译器恰好将堆栈分配的变量放在不同版本程序中的不同位置。尝试在同一程序中包含printf和cout版本,以便它们使用完全相同的指针。然后您会看到这两个版本的行为方式相同。intn=44;printf("n=%d\t&n=%x\

c++ - 对引用和指针的混淆

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhatarethedifferencesbetweenpointervariableandreferencevariableinC++?Whatarethedistinctionsbetweenthevarioussymbols(*,&,etc)combinedwithparameters?我在理解下面粘贴的示例代码时遇到了一些麻烦。具体来说,函数Buf&operator=(constBuf&);。据我了解,此函数需要返回类Buf的对象的地址。出现两个问题:将其声明为Buf*operator=(constB

c++ - '*(<type> *) &x' 和 'x' 有什么区别?

有什么区别inti=123;intk;k=*(int*)&i;cout和inti=123;intk;k=i;cout它们都给出相同的输出,但有什么不同吗?(我在快速平方根反函数的Quake3代码中找到了第一个片段) 最佳答案 第三季度:floatQ_rsqrt(floatnumber){longi;floatx2,y;constfloatthreehalfs=1.5F;x2=number*0.5F;y=number;i=*(long*)&y;//evilfloatingpointbitlevelhackingi=0x5f3759df

c++ - 递增数组变量时需要不一致的左值错误

我在执行*++a时收到“需要左值作为增量操作数”。我哪里出错了?我认为它将等同于*(a+1)。这种行为很奇怪,因为*++argv工作正常。请帮忙。#includeintmain(intargc,char*argv[]){printf("Argis:=%s\n",*++argv);inta1[]={1,2,3,4,5,6};inta2[]={7,8,9,10,11,12};int*a[2];a[0]=a1;a[1]=a2;printf("ptr=%d\n",*++a);return0;} 最佳答案 a是一个常量(数组名)你不能通过做+

c++ - C++中的指针有什么用?

我在理解这个程序中指针的使用时遇到了一些困难:#includeclassABC{public:intdata;voidgetdata(){cout>data;coutgetdata();}我得到了以下步骤之前的所有内容:ABC*q;那有什么作用?我的书说它是一个类类型的指针(它非常含糊不清,语法可悲)。但是,这是什么意思?指向ABC类地址的指针?如果是,那么下一步会让我感到困惑。q=&obj.data;所以我们将这个指针指向data的位置,这是一个变量。那ABC*q;如何适应呢?最后一步。q->getdata();有什么作用?我的书说它是一个“指向成员函数运算符的指针”,但没有给出任何

c++ - 如何在 C++ 运行时声明 n 阶指针

指针可以这样声明:inta=1,*b=&a,//1storderpointer**c=&b,//2ndorderpointer***d=&c,//3rdorderpointer****e=&d,//4thorderpointer*****f=&e,//5thorderpointer***n-stars***f;//n-thorderpointer在这里,我们需要在编译时知道指针在声明时的顺序。是否有可能声明一个指针,其顺序仅在运行时才知道?与这个问题相关的是,是否可以在运行时查询任意指针的顺序?intorder=GET_ORDER_OF_PTR(f)//returns5int/*ins

c++ - 为什么打印语句会改变指针的值?

我写了一个这样的c++代码:#includeusingnamespacestd;intmain(){inti=2;inti2=0;void*pi=&i-1;cout输出是:bycout-thevalueof*piis:0byprintf-thevalueof*piis:0theaddressofpiis:0029fe94theaddressofi2is:0029fe94thevalueofi2is:0现在,如果我删除将打印地址的语句。#includeusingnamespacestd;intmain(){inti=2;inti2=0;void*pi=&i-1;cout现在的输出是:by

c++ - 指向 char 的指针与指向数组的指针

在我决定复习一些所谓的简单示例之前,我认为我对指针有一定的了解。我知道的一件事是,在声明数组时说:intarr[2]{3,5};arr将保存数组中第一个元素的值,因此尝试打印(cout)显然给出了arr[0]的地址.即使我的程序使用指针它仍然相似。我的问题是为什么我可以打印h并且有bonjour作为输出,但我不能对p做同样的事情?当我增加h++时它看起来也像然后再次打印我得到onjour.指针与char有何不同??#include#includeintmain(){char*h="bonjour";intk[4]{3,4,5,6};int*p=k;std::cout