- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
因为我们只能将一个指针转换为另一个指针,那么“(void *) t 和 (int)threadid”在下面的代码中究竟是如何工作的呢?我们不应该使用 &t 而不是 t 吗?
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0;t<NUM_THREADS;t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
/* Last thing that main() should do */
pthread_exit(NULL);
}
最佳答案
为了扩展我的评论,C 明确规定指针可以转换为整数,反之亦然。除了值为 0
的整数常量(可靠地转换为 NULL 指针)外,结果是实现定义的。这种转换只需要按照我下面的附录中的描述是可逆的。
然而,在实践中,对于某些 n,指针表示通常采用等同于 n 位无符号整数的形式。在这些情况下,通常情况下您可以安全地在指针和足够宽度的整数之间来回转换而不会丢失信息。更有可能(但仍然不能保证)您可以从(不太宽的)整数到指针并返回而不会丢失信息,即使您可能无法安全地执行指针 -> 整数 -> 指针。符合标准的 C 实现将记录所有实现定义的行为的详细信息,包括这些。
您提供的程序取决于此类转换;它们可以在许多环境中工作,但它们是否真的可以工作取决于所使用的 C 实现。正如您所建议的那样,通过传递一个真正的指针(并将其作为一个指针使用)可以避免这种实现依赖。
更新添加:
在评论中,@IanAbbott 提出了 intptr_t
类型,C2011 是这样描述的:
a signed integer type with the property that any valid pointer to void can be converted to this type, then converted back to pointer to void, and the result will compare equal to the original pointer [...] optional.
-- C2011, 7.20.1.4
提供此类型的符合规范的实现将确保其关于转换的行为符合规定,但由于实现提供它是可选的,因此这不会与指针/整数转换的实现指定性质冲突(这在 C2011 6.3.2.3/3-6 中有描述)。即使是提供这种类型的实现也不因此接受涉及其他整数类型(或其他指针类型)的转换的任何义务。
另请注意,尽管 intptr_t
或 uintptr_t
(如果可用)提供了从指针到整数返回到指针的往返转换,但其规定与整数无关就标准而言,指向整数的指针。
关于关于无效的澄清*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092669/
在此链接中:http://www.sencha.com/blog/spotlight-ext-js-customers/ 请滚动到部分:为什么我们选择 Ext JS 有这一行: By using Ex
只是想确保我正确理解这一点(我会在 SO Chat 上问,但它已经死在那里了!): 我们有一个顶点数组,我们通过绑定(bind)它使其成为“当前” 然后我们有一个缓冲区,我们将其绑定(bind)到目标
我正在学习与 Java Swing 一起使用的类(class),但我遇到了障碍。在这个项目中,我们正在为不同的组件设置大小,但是,导师特意敲了一行我不太理解的代码,我只是在寻找这行代码概念的解释。 基
所以我尝试创建一个 HttpsRequest,效果非常好。问题是,我做错了什么,我认为这可能是因为我使用 HttpResponse,但我没有找到任何与 Https 类似的东西。有没有一种方法可以像 h
我正在阅读 Martin Fowler 的“UML distilled”,在阅读关联类的过程中,我得到了这句话: What benefit do you gain with the associati
我只是询问此说明: String[][] s = new String[2][2]; 如果我创建这个变量“s”,我会创建一个包含 2 行和 2 列的字符串表吗?或者 2 个表有 2 个元素?感谢您的澄
我目前正在做的事情需要为世界各地的用户提供本地化时间。所有日期时间都存储为 UTC,因此转换它们非常容易,并且我们有一个已知的、安全的引用点等等。 但是,关于如何表达偏移量的一些事情让我摸不着头脑。
我开始学习 spring,我遇到了一个定义,它说“Spring 使开发人员能够在没有应用程序服务器的情况下进行企业开发”。 这到底是什么意思,使用应用服务器进行企业开发有什么危害。 但是开发者在进行企
我是 AngularJS 的新手,对如何设置 angularJS 进行开发感到困惑。 Link1 link1 说我们需要 node.js 和一系列其他工具,这些工具必须在使用 AngularJS 之前
我是 iPhone 和 iPad 应用程序的开发者。 我的一个应用程序是在线个人财务管理工具的配套应用程序,该工具通过网站提供其服务和功能。这些功能的一部分将通过我正在创建的原生 iOS 应用程序提供
我正在研究飞行模拟器。我读过一篇关于四元数的教程(这个:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quater
抱歉,如果这是一个微不足道的问题: 实现 1: class Foo { protected: int bar; public: Foo(int bar) {
作为 C 中实现定义行为的示例。C 标准规定数据类型的大小是实现定义的。因此,假设 sizeof(int) 是实现定义的。 此实现定义的行为是否意味着 size(int) 依赖于平台或由编译器供应商定
从理论上讲,inline 函数在 C 语言中具有内部/静态链接,也就是说,它们仅在单个翻译单元内可见。因此,在两个单独的文件中定义的内联函数应该无法相互看到,并且两者都有自己的地址空间。 我正在尝试使
对于神童来说,这可能是一个非常基本的问题。但我对处理它有疑问。 在转换期间我们使用: int.Parse(someThing) Convert.ToInt32 或 Convert.ToString()
这个问题在这里已经有了答案: Regarding Android Permissions and Signature Protection level (2 个答案) 关闭 8 年前。 由于我是An
我有这个功能: 函数 Foo(){} 根据这张图片: >> Foo.prototype -> Foo {} 所以如果我写: Foo.prototype.constructor 现在 - 它引
我读了this article关于 Task.ConfigureAwait,它有助于防止异步代码中的死锁。 看看这段代码:(我知道我不应该做 .Result ,但这是问题的一部分) private v
我正在学习 C#。我可以将闭包理解为一种可以适应其定义环境中的变化的结构吗。 示例: List gurus = new List() {
这个问题在这里已经有了答案: Difference between volatile and synchronized in Java (4 个回答) 关闭6年前。 我对我读到的关于 volatile
我是一名优秀的程序员,十分优秀!