gpt4 book ai didi

C++:这是使用整数变量作为函数调用指针的正确方法吗?

转载 作者:行者123 更新时间:2023-11-28 04:35:39 25 4
gpt4 key购买 nike

我是 C++ 新手。

上下文:我发现这个第三方代码片段似乎可以工作,但根据我(非常有限)的 C++ 知识,我怀疑它会导致问题.片段如下:

int aVariable;

int anInt = 1;
int anotherInt = 2;
int lastInt = 3;

aVariable = CHAIN(anInt, anotherInt, lastInt);

其中 CHAIN 定义如下(这是库的一部分):

int CHAIN(){ Map(&CHAIN, MakeProcInstance(&_CHAIN), MAP_IPTR_VPN); }
int _CHAIN(int i, int np, int p){ return ASMAlloc(np, p, &chainproc); }
int keyalloc[16384], kpos, alloc_locked, tmp[4];

int ASMAlloc(int np, int p, alias proc)
{
int v, x;
// if(alloc_locked) return 0 & printf("WARNING: you can declare compound key statements (SEQ, CHAIN, EXEC, TEMPO, AXIS) only inside main() call, and not during an event.\xa");
v = elements(&keyalloc) - kpos - 4;
if(v < np | !np) return 0; // not enough allocation space or no parameters
Map(&v, p); Dim(&v, np); // v = params array
keyalloc[kpos] = np + 4; // size
keyalloc[kpos+1] = &proc; // function
keyalloc[kpos+2] = kpos + 2 + np; // parameters index
while(x < np)
{
keyalloc[kpos+3+x] = v[x];
x = x+1;
}
keyalloc[kpos+3+np] = kpos + 3 | JUMP;
x = ASMFind(kpos);
if(x == kpos) kpos = kpos + np + 4;
return x + 1 | PROC; // skip block size
}

int ASMFind(int x)
{
int i, j, k; while(i < x)
{
k = i + keyalloc[i]; // next
if(keyalloc[i] == keyalloc[x]) // size
if(keyalloc[i+1] == keyalloc[x+1]) // proc
{
j = x-i;
i = i+3;
while(keyalloc[i] == keyalloc[j+i]) i = i+1; // param
if((keyalloc[i] & 0xffff0000) == JUMP) return x-j;
}
i = k;
}
return x;
}

编辑:

奇怪的是运行

CHAIN(aVariable);

有效地执行

CHAIN(anInt, anotherInt, lastInt);

不知何故。这就是让我相信 aVariable 实际上是一个指针的原因。

问题:

像这样将参数化函数调用存储到整数变量中是否正确? “aVariable”是否仅作为指针工作,或者这是否可能破坏随机内存区域?

最佳答案

您正在调用一个函数(通过混淆接口(interface)),并将结果存储在一个整数中。它可能会或可能不会导致问题,具体取决于您如何使用该值/您期望它的含义。

您的示例包含太多 undefined symbol ,读者无法提供更好的答案。

此外,我认为这是 C 代码,而不是 C++ 代码。

关于C++:这是使用整数变量作为函数调用指针的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51543121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com