“指向”存储在内存中的另一个值的数据类型。指针变量包含某个其他实体(变量或函数或其他实体)的内存地址。此标记应用于涉及指针使用的问题,而不是引用。使用指针的最常见编程语言是C,C ++,Go和汇编语言。使用特定语言标记。其他有用的标签是描述指针使用的方法,函数,结构等。
当使用数组下标语法尝试获取位于数组内部的值的地址时,与使用指针 arit 时相反,我得到了不同的内存地址(无效的地址)...
我是 C 编程新手,在理解指针方面遇到了一些困难。我尝试使用 for 循环进行实验,以更好地了解它们的工作原理。我声明了一个变量
C 编译器如何向函数传递和返回结构/联合?结构体是否在函数调用之前被压入堆栈,是否只是传递给函数的结构体引用?...
我在代码中使用 C++ 11 标准。我已经使用双指针变量有一段时间了,现在我想用指针向量替换它。更换后,我得到了
#包括 int main() { int arr_2D[3][3]={ {1,2,3}, {11,22,33}, {111,222,333}}; int (*ptr)[3]=arr_2D; printf("ptr=0x%...
无法从我的 main 函数中访问使用 malloc 分配的内存
据我所知,在函数中使用 malloc 分配内存允许您在 main 中使用该内存,直到您手动释放它。我有一个函数可以读取 MNISTI 图像文件并创建矢量...
解决 Yacc 和 Flex 编译器项目中的错误 |无法从 YACC Grammar 生成 AST
我想显示给定表达式的 AST,下面给出的是我的相同代码 莱克斯文件 %{ #include“y.tab.h” #include“ast.h” %} %选项 yylineno 数字 [0-...
假设我们在 Cython 中有以下内容: ctypedef struct 结构: int* 数组 整数大小 cdef print_fx(结构对象): print(obj.数组[0]) cdef create_object(int 大小): cdef 结构...
我是 C 新手,正在尝试理解以下代码 #包括 int main() { int i[3] = {1, 2, 3}; int* p = &i; printf("%d “,*p); printf("%d\...
#包括 #包括 #包括 无效 ffree(char **pp) { 如果(!pp) 返回; char **a = pp; 而(*pp){ 免费(*页); //...
考虑以下函数声明: 无效 foo(无效 *); 标准有关于函数调用的明确段落 6.5.2.2/p7: 如果表示被调用函数的表达式有...
我正在使用 GDB,并且我在其中一个寄存器中有一个指向 c 样式字符串的指针。我想显示该字符串。然而,当我尝试取消引用寄存器中的指针,甚至手动取消引用时,它...
用指向非常量字符串的指针初始化对常量字符串的指针的引用时出错
嗨,我试图了解引用和指针在 C++ 中的工作原理,因此尝试了不同的示例,其中一个示例我无法理解为什么会产生错误: int main() { ...
有人可以向我解释如何以正确的方式使用二维浮点数组进行移动语义吗?我尝试过类似的事情: 结构矩阵 { 矩阵&运算符=(矩阵&& rhs) noexcep...
动态变量的位置是否有限制,静态变量有什么不同吗? 进程内存中是否存在无法分配动态变量的分区...
所以我有一个接受两个字符串值的字谜函数。两个字符串都用 char[100] 初始化,输入是用户通过键盘输入。 bool isAnagram(char* 模式, char* 字符串...
我正在尝试写入内存中的某个地址(我从作弊引擎获得的基地址,所以它不会改变),问题是我无法弄清楚我需要如何使用所有偏移量进行写入。 哈...
情况 我使用的一些第三方 API 使用原始指针,但我的客户端代码中到处都有智能指针。 问题 当我想围绕 API 编写包装函数时,我面临一个问题:Wh...
为什么我的“setter”函数存储在 std::map 中,无法正确设置值?
我正在尝试编写一个基本的游戏引擎,并且遇到了有关动态组件创建的问题。我这里有一个最小的工作示例: #包括 #包括 我正在尝试编写一个基本的游戏引擎,并且遇到了有关动态组件创建的问题。我这里有一个最小的工作示例: #include <bitset> #include <variant> #include <map> #include <functional> #include <iostream> using Property = std::variant<int, unsigned int, bool, double, std::string>; class Component { public: std::map<std::string, std::function<void(Property)>> _setters; Component() {} virtual void DestroyComponent() {} }; class Transform : public Component { public: static std::string name() { return "Transform"; } void __set_x(Property p) { x = std::get<double>(p); } public: double x = 0; public: Transform() { _setters["x"] = [=](Property p){this->__set_x(p); }; } }; int main() { std::vector<Transform> ts = {Transform()}; Component* c = &ts[0]; c->_setters["x"](3.0); std::cout << ts[0].x << std::endl; return 0; } (请注意,格式方面的任何奇怪之处都来自于这样一个事实:为了方便起见,我的大多数组件都使用大量宏进行了定义。) 这将最终打印 0 并在应该打印 3 时返回。 现在的问题是这样的:我有一个子类的组件列表(这里表示为变换向量),我需要获取其中一个。在运行时,我不知道该类是什么,因此我通过引用元素的索引作为组件指针来获取它。当我的代码调用由 _setters[<property>] 链接到的函数时,它确实按预期进入该函数(通过将 print 函数放入 lambda 并调用函数来证明),但该值从未设置。通过调试,我还向自己证明,引用向量的索引会产生正确的内存地址,因此指针应该是正确的。所以我的问题是:为什么值设置不正确,如何修复它? 问题在于捕获 this 然后复制您的 Transform 对象。 在 Transform() 构造函数中,表达式 _setters["x"] = [=](Property p){this->__set_x(p); }; 捕获 this。这捕获了发生捕获时 this 的即时值,它无法捕获“当前对象”的概念。 当您构造 ts 时,您使用一个初始值设定项列表,该列表需要复制初始值设定项。在此复制过程中,_setters 被复制,包括原始对象的默认构造函数设置的 setter。它捕获的this仍然指向原始对象。 后来,当你调用c->_setters["x"](3.0);时,你成功运行了Transform指向的c的setter,但是这个setter是通过复制另一个Transform获得的。 setter 捕获的 this 仍然指向初始化列表中的原始实例。它并不指向c。 setter 尝试为不再存在的实例设置 x 的值,从而导致未定义的行为。 您可以通过添加复制构造函数来解决该问题。 Transform(Transform const& copy) : Component(copy) { _setters["x"] = [=](Property p){this->__set_x(p); }; }
这是一个与作业有关的问题。这不是我完成的作业本身。 这是函数的一部分(我认为唯一相关的部分)。 双均值(双* pD,int* sz)...