草庐IT

Pointers

全部标签

c++ - 通过指针在函数之间传递 vector

有人建议我使用指针来添加一个我想从某个现有函数传递到另一个函数的vector。不过,我真的很困惑如何从该指针中获取信息。我已经尝试了很多我在这里和那里读到的东西,所以让我演示一下我在说什么。主要程序:std::vector*dvertex=NULL;track.calculate(irrelevantstuff,dvertex)二级程序(跟踪、计算)track::caclulate(irrelevantstuff,vector*dvertex){...vectorpos;...posfilledaftersomecalculationsif(!(dvertex==NULL)){dver

c++ - 如何在 std::string 中存储 const char*?

char*buffer1="abc";constchar*buffer2=(constchar*)buffer;std::stringstr(buffer2);这行得通,但我想声明std::string对象,即str,一次并多次使用它来存储不同的常量字符*。出路在哪里? 最佳答案 您可以重新分配:constchar*buf1="abc";constchar*buf2="def";std::stringstr(buf1);str=buf2;//Callsstr.operator=(constchar*)

c++ - 将字符串文字分配给 char*

以下代码在C++0x中是合法的、弃用的还是非法的?char*p="foobar";我最初问这个问题here作为评论。 最佳答案 转换char*p="foobar";在C++98/C++03中被弃用,并在C++0x中被移除(即,§4.2/2被移除)。因此,该代码在C++0x中无效。但是,MinGWg++4.4.1仍然只发出警告,不发出错误。C++98/C++03§4.2/2(whichisremovedinC++0x):Astringliteral(2.13.4)thatisnotawidestringliteralcanbeconv

c++ - 结构的地址是否与其第一个成员的地址相同?

考虑我有如下结构:structBitmask{unsignedcharpayload_length:7;unsignedcharmask:1;unsignedcharopcode:4;unsignedcharrsv3:1;unsignedcharrsv2:1;unsignedcharrsv1:1;unsignedcharfin:1;};constchar*payload="Hello";constsize_tpayload_length=strlen(payload);Bitmask*header=newBitmask();header->fin=1;header->rsv1=0;he

c++ - 可以使用 std::uintptr_t 来避免越界指针算法的未定义行为吗?

现在我们知道,越界指针运算具有未定义的行为,如SOquestion中所述。.我的问题是:我们能否通过转换为std::uintptr_t进行算术运算然后转换回指针来解决此类限制?保证有效吗?例如:chara[5];autou=reinterpret_cast(a)-1;autop=reinterpret_cast(u+1);//OK?现实世界的用途是优化偏移内存访问——而不是p[n+offset],我想做offset_p[n].编辑为了使问题更明确:给定一个基指针p一个字符数组,如果p+n是一个有效的指针,将reinterpret_cast(reinterpret_cast(p)+n)保

c++ - 为什么指针更快更高效

我在Cbook中读到这篇文章:Pointershaveseveraluses,including:•Creatingfastandefficientcode•Providingaconvenientmeansforaddressingmanytypesofproblems•Supportingdynamicmemoryallocation•Makingexpressionscompactandsuccinct•Providingtheabilitytopassdatastructuresbypointerwithoutincurringalargeoverhead•Protecting

c++ - 为什么我们不能在栈上分配动态内存?

在堆栈上分配东西很棒,因为我们有RAII,不必担心内存泄漏等问题。然而有时我们必须在堆上分配:如果数据真的很大(推荐)——因为栈很小。如果要分配的数据大小仅在运行时已知(动态分配)。两个问题:为什么我们不能分配动态内存(即大小为仅在运行时知道)在堆栈上?为什么我们只能通过指针引用堆上的内存,而栈上的内存可以通过普通变量引用?IE。事物t;。编辑:我知道一些编译器支持可变长度数组——这是动态分配的堆栈内存。但这确实是一般规则的异常(exception)。我有兴趣了解为什么通常我们不能在堆栈上分配动态内存的根本原因-其技术原因及其背后的理性。 最佳答案

c++ - 编译器提示 "Error: stray '\24 0' in program"

需要我实现以下功能:voidcalc(double*a,double*b,intr,intc,double(*f)(double))参数a、r、c、f为输入,b为输出。“a”和“b”是具有“r”行和“c”的二维矩阵列。“f”是一个函数指针,可以指向以下类型的任何函数:doublefunction‐name(doublex){…}函数calc将矩阵a中的每个元素(即aij)转换为矩阵b中的bij=f(aij)。我是这样实现calc函数的,放在程序中测试一下:#include#includeusingnamespacestd;doublef1(doublex){returnx*1.7;}v

c++ - 为什么 sizeof(ptrdiff_t) == sizeof(uintptr_t)

我看到几篇关于size_t与uintptr_t/ptrdiff_t的帖子(例如size_tvs.uintptr_t),但没有关于这些新的c99ptr大小类型的相对大小的帖子。示例机器:vanillaubuntu14ltsx64,gcc4.8:printf("%zu,%zu,%zu\n",sizeof(uintptr_t),sizeof(intptr_t),sizeof(ptrdiff_t));打印:“8,8,8”这对我来说没有意义,因为我希望必须签名的diff类型需要比unsignedptr本身更多的位。考虑:NULL-(2^64-1)/*largestptr,64bitsof1's.

c++ - 很难理解 char (*p)[sizeof(c)]; 的优先级原则;

我正在学习指针并挑战自己,我尝试取消引用指向字符数组的指针。最终这成功了:char(*p)[sizeof(c)];其中c是一个数组c[]="something"我很难理解(*p)[sizeof(c)];与*p[sizeof(c)];的区别。p>根据我目前所知道的(这并不多!)计算机在(*p)[sizeof(c)];的情况下是这样说的:“p指向c!哦,顺便说一句,p是一个数组,无论sizeof(c)最终是什么”。但这对我来说似乎很奇怪,所以我想我对添加括号时所构造的内容感到困惑。谁能解释一下?上下文中的完整代码:#includeusingnamespacestd;intmain(inta