我会尽量保持清醒,但是,如果我最终没有,我会道歉。我已经在这方面工作了一段时间,而且我对c ++很陌生。
编辑2:cObj是另一个文件中定义的类对象
我在matlab中编写了一些包装代码,在c ++中编写了实现代码。我的一些代码使用指针作为函数的参数,其唯一目的是成为c ++函数的c接口。作为一个例子,c接口函数如下所示。
DLLEXPORT int GetInfo(int num, int* ChannelMask, int* ChannelIndex)
{
return cObj->GetChannelInfo(num, ChannelMask, ChannelIndex);
}
现在我在这里提出问题,我将提供更多代码来说明。
函数GetChannelInfo也接受指针参数,实际上是与GetInfo中完全相同的指针参数。
所以它看起来像这样。
int CCan::GetChannelInfo(int num, int* ChannelMask, int* ChannelIndex)
{
unsigned char* pChanIndex = &ChanIndex //Class variable
unsigned long long pChanMaskTx = &ChanMaskTx; //Also a class variable
*pChanMaskTx = Some Assignment value, lets say 5;
*pChanIndex = Another assignment value, let's say 6; //just for arguments sake, don't care about the type.
//Now this is passed to the original pointer value
*ChannelMask = *pChanMaskTx;
*ChannelIndex = *pChanIndex;
return 0;
}
我的问题是,在第一个函数GetInfo中,为什么它可以正常传递num,ChannelMask和ChannelIndex。 即返回cObj-> GetChannelInfo(num,ChannelMask,ChannelIndex);
一般来说,当我看到互联网上的文章指针时,它就是这样的。
void func(int* B)
{
*B = *B + 1;
}
int main ()
{
int A = 5;
func(&A);
//Now A is equal to 6 instead of 5
}
传递的地址怎么了?在我编写的函数中(我根据同事代码完成的),它似乎确实有用。但是,我对于为什么或如何运作感到困惑。据我所知,指针在某个时刻需要一个地址。但是,我的代码中没有任何地方发生这种情况。我希望有人可以对此有所了解,以及发生了什么。或者也许我完全错了,而且由于纯粹的意外,它似乎正在发挥作用。
编辑1:num不应该是指针。顺便提一下,问题的关键在于DLLEXPORT部分。 GetChannelInfo是一个类的成员。我将cObj实例化为代码顶部的指针对象,其中定义了GetInfo
编辑3:为什么我会被投票?我认为这是你在不知道/得到答案时提出问题的地方,特别是当你是新的时候。你有没有编程,所以你忘记了它不知道的样子?啧..
ANSWER
编辑4:我将提供更多详细信息以防其他人遇到此问题。接受的答案解释得很好。我在原始问题中没有包含的是matlab代码,可能会产生以下影响:
function [status] = GetChannelInfo(num)
status = calllib('Test','GetInfo',num, 0,0);
上面在calllib函数中发生的事情(我们都没有看到)是matlab将calllib中最后两个参数的地址传递给调用函数,我原本应该这样做如果我用c或c ++写整篇文章,那就用c或c ++做。
答案 0 :(得分:2)
您的具体问题是将ChannelMask
传递给需要指针的函数是合法的。作为答案,请考虑这个
void bar(int *ptr) {
// ...
}
void foo(int *ptr) {
bar(ptr);
}
int main(void) {
int x;
foo(&x);
}
您可以看到foo
和bar
都需要指针。 main
将x
的地址传递给foo
,因为x
不是指针。然后foo
将ptr
传递给bar
,因为ptr
已经是指针。
答案 1 :(得分:1)
好的 - 无论如何似乎是一个不好的例子
cObj看起来像你没有展示的一些全局 GetChannelInfo不是类
的成员函数功能签名不匹配 int GetInfo(int * num,int * ChannelMask,int * ChannelIndex) int GetChannelInfo(int num,int * ChannelMask,int * ChannelIndex)
ie num是一个指针而不是另一个指针