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

C++: is this a correct way to use integer variables as pointers to a function call?

本文关键字:指针 函数调用 方法 变量 整数 C++      更新时间:2023-10-16

我是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"是否只是一个指针,或者这可能会破坏随机内存区域?

您正在调用一个函数(通过模糊接口(,并将结果存储在一个整数中。它可能会引起问题,也可能不会引起问题,这取决于你如何使用这个值/你期望它意味着什么。

您的示例包含太多未定义的符号,读者无法提供更好的答案。

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