C(++) 指针,需要澄清
C(++) Pointers, needing clarification
可能的重复项:
理解指针的障碍是什么,可以做些什么来克服它们?
这可能是我在这里要问的最愚蠢的问题,但是一年来关于这个想法何时出现在我脑海中的随机谷歌搜索让我无处可去。
有人愿意向我解释在 C(++) 中指针的使用、为什么它们有用以及指针的实际应用吗?
我已经知道的:
&
指针在变量名称前面时,会更改引用以引用变量在内存中的地址。- 指针可节省堆栈上的空间。
- 没有指针是可能的,尽管像标准库这样的库需要它们的基本知识,这严重限制了如果你选择不学习它们,你可以做什么。
对于那些试图解释的人 - 如果它有帮助的话 - 我有5年的Java业余经验,在实践中 - 不像C那样处理指针(但是,Java确实使用指针 - 参见NullPointerException来证明这一点)。
提前感谢!
Java中的每个对象"引用"实际上都是一个指针。当您将对象作为参数传递给 Java 中的方法时,您实际上是在传递指向该对象的指针;实际对象不会被复制或任何东西。调用方和被调用方都可以引用同一对象。这对你来说可能是很自然的。
相反,在C++中,默认情况下,如果将对象传递给方法,则会复制该对象。如果更改方法中的对象,则调用方中的原始对象保持不变。这对你来说应该很奇怪。
但是,如果在C++中使用指针,则C++对象的行为类似于 Java 对象。对象保留其标识,而不是不断复制和销毁。呼!
C++中的引用是一种伪装的指针;如果通过引用将对象传递给方法,则调用方和被调用方都引用同一对象,但不能在不损坏原始对象的情况下使被调用方中的变量引用不同的对象。
你的问题没有简单的答案。你只需要研究一段时间。
但让我这样说:在机器层面,微处理器与存储器和寄存器一起工作。指针只是一项功能,也允许您直接使用内存。无论如何,这就是计算机所做的。这可以通过多种方式使代码更灵活、更高效或更易于实现。
对于使用它们多年的人来说,它们似乎是世界上最自然的事情。对于像 C# 这样的语言,即使语言控制了它们,它们仍然存在。
不会节省堆栈上的空间,因为这是它们的主要功能。
指针是将地址存储在某些数据段的内存中的变量。此地址存储在变量中,就像您可以使用变量i
将某些数据片段的索引存储在数组中一样。i
不是数据,但它告诉您在数组中的位置可以找到它。指针不是数据,但它告诉您可以在内存中找到它的位置。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错