C 函数和 java 方法之间的区别之一是对象在 C 中显式传递,而在 Java 中隐式传递,任何人都可以提供一个示例来说明隐式和显式传递是什么?
问问题
5018 次
2 回答
4
我不确定你的意思是什么,但也许你正在寻找如何在 C 中实现面向对象的风格。
Java 是一种真正的面向对象的语言。这意味着它有类和对象。当您编写需要访问调用它的对象的方法时,可以使用this
关键字,它指的是有问题的对象:
int getSomething()
{
return this._something;
}
因此,关键字的实际值this
取决于对象 - 然后将其视为参数的隐式参数。
但是,在 C 中,没有真正的类或对象。如果你想实现 OO 风格的代码,你必须将对应于 Java 的参数this
(即,你在其上调用“方法”的“对象”)显式地传递给函数。例如在 cURL 网络库中:
CURL *hndl = curl_easy_init();
curl_easy_setopt(hndl, CURLOPT_URL, "http://example.com");
curl_easy_perform(hndl);
大致相当于一些像这样的OO代码:
CURL hndl = new CURL;
hndl->setopt(CURLOPT_URL, "http://example.com");
hndl->perform();
请注意,在 C 中,以这种风格编写代码时,“对象”通常称为“上下文”或“句柄”。
于 2012-11-21T17:39:31.710 回答
1
至少在 Java 中,如果它是通过引用传递的,那么被传递的引用,我记得它在 C 中调用的指针,是原始指针的副本,而不是原始指针本身。
因此,有一个存储区域,其中包含有关对象的信息。然后有一个指向该内存区域的指针。当 Java 通过引用传递时,它首先复制指向内存区域的指针,然后将指针的复制作为参数传递。
这一切都完全独立于其他传递引用和传递值的区别。
于 2012-11-21T17:36:17.337 回答