Questions tagged «pointers»

指针是一种数据类型,其值直接使用其地址直接引用(或“指向”)存储在计算机内存中其他位置的另一个值。

11
为什么C中的void表示不无效?
在Java和C#等强类型语言中,void(或Void)作为方法的返回类型似乎意味着: 此方法不返回任何内容。没有。没有回报。您不会从此方法收到任何信息。 真正奇怪的是,在C语言中,void作为返回类型甚至方法参数类型的含义是: 真的可以是任何东西。您必须阅读源代码才能找到答案。祝好运。如果这是一个指针,那么您应该真的知道自己在做什么。 考虑以下C语言示例: void describe(void *thing) { Object *obj = thing; printf("%s.\n", obj->description); } void *move(void *location, Direction direction) { void *next = NULL; // logic! return next; } 显然,第二个方法返回一个指针,根据定义,该指针可以是任何东西。 由于C早于Java和C#,因此为什么这些语言采用void“ nothing”的含义,而C却使用“ nothing or any(当指针时)”呢?
25 c  pointers 

4
是否可以存储千字节块和指针的所有可能排列?
这是一个很难缠住我的主意的想法,我将不胜感激任何编辑/帮助,以使其对于那些熟悉的人来说更具可读性。 从理论上讲,是否有可能在硬盘上保存一个千字节的每个可能二进制排列的一个副本,然后让系统的其余部分简单地创建指向这些位置的指针? 这样制作的系统会比简单地直接存储信息快吗? 要解释另一种方式,请说而不是句子: “你好,我是鲍勃。” 和“那个三明治看起来很好吃。” ...存储在硬盘驱动器上,我们会将字母和其他字符的所有排列替换为某个数字(例如1000个字符左右),然后将句子存储为: [Pointer#21381723]

10
指针/递归有什么困难?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 在Java学校的危险中, Joel讨论了他在Penn的经历以及“分段错误”的难度。他说 [在您之前,段错误是很难的]“深呼吸,真正尝试迫使您的思想同时在两个不同的抽象级别上工作。” 给出了导致段错误的常见原因的清单,我不明白我们必须如何在2个抽象级别上工作。 由于某种原因,Joel认为这些概念是程序员抽象能力的核心。我不想承担太多。那么,指针/递归到底有什么困难呢?例子会很好。
20 c  pointers  recursion 

4
在C#中真正使用过指针吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 在C#中编码时,使用指针是一个好选择还是必须选择的情况是什么?我说的是不安全的指针。
19 c#  pointers 

3
什么时候以及为什么指针开始被视为冒险?
似乎在考虑在编程语言中使用指针时,已经有了逐渐的转变,因此,人们普遍认为指针被认为是有风险的(如果不是彻头彻尾的“邪恶”或类似的强化)。 这种思想转变的历史发展是什么?是否有特定的开创性事件,研究或其他发展? 例如,简单回顾一下从C到C ++到Java的过渡,似乎显示出一种补充指针,然后完全用引用替换指针的趋势。但是,真正的事件链可能比这更微妙和复杂,并且不是那么连续。使其成为那些主流语言的功能可能起源于其他地方,也许很久以前了。 注意:我并不是在问指针,引用和其他东西的实际优点。我的重点是这种明显转变的理由。
18 history  pointers 

4
如何在C指针中确定优先级?
我遇到了两个难以理解的指针声明。我对优先规则的理解是这样的: Operator Precedence Associativity (), [ ] 1 Left to Right *, identifier 2 Right to Left Data type 3 但是即使这样,我似乎也无法弄清楚如何正确评估以下示例: 第一个例子 float * (* (*ptr)(int))(double **,char c) 我的评价: *(ptr) (int) *(*ptr)(int) *(*(*ptr)(int)) 然后, double ** char c 第二个例子 unsigned **( * (*ptr) [5] ) (char const *,int *) *(ptr) …
14 c  pointers 



4
指针索引
我目前正在阅读一本书,标题为“ C的数字食谱”。在本书中,作者详细介绍了如果我们的索引以1开头(我不完全遵循他的论点,而这不是本文的重点),某些算法在本质上会更好地工作,但是C总是以0开头的数组索引为了解决这个问题,他建议在分配后简单地减小指针,例如: float *a = malloc(size); a--; 他说,这将有效地为您提供一个索引,该索引的索引从1开始,然后将被释放: free(a + 1); 据我所知,这是C标准未定义的行为。在HPC社区中,这显然是一本享有盛誉的书,所以我不想简单地无视他在说什么,但是对我而言,仅将指针减少到所分配的范围之外似乎是很粗略的。这是C中的“允许”行为吗?我已经使用gcc和icc对其进行了测试,这两个结果似乎都表明我没有担心什么,但我想绝对肯定。
11 c  pointers 

8
指针的用例和优点是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我经常很难看到指针的优点(低级编程除外)。 为什么使用char *而不是String或char []或指针算法带来了什么好处。 那么指针的优缺点是什么?
10 pointers 

2
从链接列表中删除项目的正确方法
在本次Slashdot采访中,引用了Linus Torvalds的话: 我见过太多的人通过跟踪“上一个”条目来删除单链接列表条目,然后删除该条目,例如 如果(prev) prev-> next = entry-> next; 否则 list_head = entry-> next; 每当我看到这样的代码时,我都会说“这个人不理解指针”。可悲的是,这很普遍。 理解指针的人只使用“指向入口指针的指针”,并使用list_head的地址对其进行初始化。然后,当他们遍历列表时,只需执行“ * pp = entry-> next”,就可以删除条目而无需使用任何条件。 自从十年前在大学中介绍C以来,作为PHP开发人员,我从未碰过任何东西。但是,我觉得这是我至少应该熟悉的一种情况。Linus在说什么?老实说,如果我被要求实现一个链表并删除一个项目,那么上面的“错误”方法就是我要解决的方法。我需要了解Linus所说的最佳代码吗? 我在这里而不是在Stack Overflow上问,因为我在生产代码中实际上没有这个问题。
10 pointers 

1
密钥/价值商店开发移植到现代C ++
我正在开发类似于Cassandra的数据库服务器。 开发从C语言开始,但是没有类,事情变得非常复杂。 目前,我在C ++ 11中移植了所有内容,但我仍在学习“现代” C ++,并对很多事情有疑问。 数据库将使用键/值对。每对都有更多信息-什么时候创建以及何时过期(如果不过期则为0)。每对都是不可变的。 关键是C字符串,值是空*,但至少目前我也使用C字符串作为值。 有抽象IList类。它从三个类继承 VectorList -C动态数组-类似于std :: vector,但使用 realloc LinkList -用于检查和性能比较 SkipList -最终将使用的类。 将来我可能Red Black也会做树。 每个都IList包含零个或多个指向对的指针,并按键排序。 如果IList太长,可以将其保存在磁盘上的特殊文件中。这个特殊文件是的read only list。 如果您需要搜索密钥, 首先在存储器IList中搜索(SkipList,SkipList或LinkList)。 然后将搜索发送到按日期排序的文件 (最新的文件在前,最早的文件在后)。 所有这些文件都在内存中映射。 如果未找到任何内容,则找不到密钥。 我对事情的执行毫无疑问IList。 目前令人困惑的是: 这些对的大小不同,它们由分配,new()并已std::shared_ptr指向它们。 class Pair{ public: // several methods... private: struct Blob; std::shared_ptr<const Blob> _blob; }; struct Pair::Blob{ uint64_t …

4
您已经发货,遇到了罕见的段错误。指针检查还是放手去做?
您已经发货,断言被关闭,您收到一个罕见的崩溃报告,指示代码中发生了空指针冲突。在开发环境中,问题将被断言所捕获。 您所拥有的只是一份崩溃报告,因此重现该问题几乎是不可能的。追踪回溯并没有提供任何有关崩溃为什么首先发生的线索。 选项:-添加指针检查以防止崩溃。这样可以防止崩溃,但是您可能甚至根本不知道为什么会发生崩溃。-让它飞起来,希望它在repro场景下再次发生 假设该应用程序不适合引导导弹或自动制动系统... 您会选择哪一个?
9 bug  pointers 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.