在没有地址的函数中使用指针
pointer use in a function without address
我会尽量说清楚,但是,如果我最终没有说清楚,我真的很抱歉。我做这个已经有一段时间了,我对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是类的成员。我在定义GetInfo的代码顶部将cObj实例化为指针对象
编辑3:为什么我被否决了?我以为当你不知道/不知道答案的时候,尤其是当你是新来的时候,你就会来问问题。你们是不是已经编程太久了都忘了不知道是什么感觉了?天哪…
编辑4:我将提供更多的细节,以防其他人遇到这个。公认的答案很好地解释了这一点。我最初的问题中没有包括的是matlab代码,这可能是以下效果的东西:
function [status] = GetChannelInfo(num)
status = calllib('Test','GetInfo',num, 0,0);
在calllib函数中发生的事情(我们没有看到)是matlab将calllib中最后两个参数的地址传递给调用函数,如果我在c或c++中编写整个东西,我将不得不在c或c++中完成。
您的具体问题是为什么将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
已经是一个指针了。
Ok -似乎是一个不好的例子
cObj看起来像没有显示的全局变量GetChannelInfo不是类的成员函数
函数签名不匹配int GetInfo(int* num, int* ChannelMask, int* ChannelIndex)int GetChannelInfo(int num, int* ChannelMask, int* ChannelIndex)
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址