(1)在函数threadFunc中,它被声明为具有void *类型,而不是int *类型

 void *threadFunc(void *arg)
{int loops = *((int *) arg);printf("the loops value is %d \n",loops);
}

(2)因此,在这个表达式中

int loops = *((int *) arg);

(3)该指针最初再次解释为int *类型的指针,也就是将void类型的指针强制转换为int类型指针。

(int *) arg

(4)然后,它被解除引用,以获得它所指向的对象。

*((int *) arg)

示例1:

#include<stdlib.h>
 #include<stdio.h>
 #include<unistd.h>
 #include<pthread.h>
 #include<string.h>
 
 void *threadFunc(void *arg)
{
   int loops = *((int *) arg);
   printf("the loops value is %d \n",loops);
}

int main(void )
{
   pthread_t t1;
   int  s=100;
    void *thread_result;
    
   s = pthread_create(&t1, NULL, threadFunc, &s);
   
   pthread_join(t1,thread_result);
   exit(0);
  
}
   s = pthread_create(&t1, NULL, threadFunc, &s); &s向 threadFunc传递的是整型实参,但是threadFunc中的形参是void指针。在threadFunc中通过将void指针转换为int类型。结果输出的是整型值。

示例2:将void 类型支撑转换为char类型。输出 的结果为Hello World

 #include<stdlib.h>#include<stdio.h>#include<unistd.h>#include<pthread.h>#include<string.h>void *threadFunc(void *arg)
{char* loops = ((char *) arg);printf("the value of loops is \n");puts(loops);
}int main(void )
{pthread_t t1;char *  s="Hello World \n";void *thread_result;pthread_create(&t1, NULL, threadFunc, s);pthread_join(t1,thread_result);exit(0);}

*((int *) arg)相关推荐

  1. AQS acquire(int arg) 深度解析

    逐行解析,预计阅读时间20分钟. 首先尝试tryacquire方法,tryacquire方法在AQS中没用具体实现(在子类), 选择ReentrantLock 的NofairSync 实现查看 首先获 ...

  2. 将Bitmap byte裸数据转换成Bitmap图片int数据

    转自:http://blog.sina.com.cn/s/blog_025270e901014z3p.html,尊重原创 我们在JNI中处理得到的BMP图片Raw数据,我们应该如何转换为Bitmap呢 ...

  3. python中的@、-、*arg、**kwarg使用方法[探索1]

    写在前面的话 虽然处于研究生阶段的我有了一定的学术成果,但是为了更好的就业,我决定每天至少学习一种python用法! 做到以代码+注释的形式进行记录 1.@函数装饰器 注:下面的代码探究源自: htt ...

  4. c语言const 修饰二级指针,C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)...

    先上代码: void func(const int ** arg) { } int main(int argc, char **argv) { int **p; func(p); return 0; ...

  5. error: cast from ‘void*’ to ‘int’ loses precision报错

    在开发多线程的时候,想在test函数中创建一个线程,并把参数传给handler这个函数,这个参数定义成了一个int型(4字节) 在编译时有丢失精度的报错,原因是64位机器中,指针占8字节:4字节int ...

  6. 转:AbstractQueuedSynchronizer的介绍和原理分析

    引自:http://ifeve.com/introduce-abstractqueuedsynchronizer/ 简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同 ...

  7. 没有与参数列表匹配的 重载函数 getline 实例_面试题:方法重载的底层原理?...

    前语:微信改版后,大量读者还没养成点赞的习惯,如写得好,望大家阅读后在右下边"好看"处点个赞,以示鼓励!长期坚持原创真的很不容易,多次想放弃,坚持是一种信仰,专注是一种态度. 关于 ...

  8. 简单C++线程池包装类源码示例

    这里给出一个简单的C++线程池包装类,该类具有的特点是: 1.线程池大小是固定的, 一创建后,就不具有伸缩特性. 一般建议是 CPU核心数的2倍或1倍. 2.简单但是很可靠. 3.资源占用极低. 在开 ...

  9. 使用 sched_setaffinity 将线程绑到CPU核上运行

    linux 提供CPU调度函数,可以将CPU某一个核和指定的线程绑定到一块运行. 这样能够充分利用CPU,且减少了不同CPU核之间的切换,尤其是在IO密集型压力之下能够提供较为友好的性能. 通过sch ...

最新文章

  1. 计算机图画大赛作品六年级,小学学生电脑绘画比赛活动方案
  2. 数据传输流程和socket简单操作
  3. 零基础可以学python吗-零基础适合学Python吗?小白能否学会Python?
  4. 宝塔面板服务器ip地址修改_「网站」快速搭建服务器环境及网站
  5. js 闭包函数 构造函数_JavaScript中的闭包,库里函数和酷抽象
  6. Linux经常使用命令(八) - touch
  7. thinkphp中I方法
  8. 十二、java知识点——类加载机制(硬货)
  9. Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci
  10. Hyper-V网络虚拟化--VM之间拷贝速度慢
  11. HeapSnap工具原理及其应用
  12. 简单的amr转换mp3音频格式转换方法
  13. 吉比特2018校招 走格子游戏
  14. 怎么用计算机算e的次方,如何在计算器上计算e的x次方?
  15. 知道创宇区块链安全实验室|Deus Finance预言机攻击事件分析
  16. 【大数据作业02】HDFS中的名称节点和数据结点的具体功能
  17. oracle口试问题,Oracle口试复习(二)
  18. 公需科目2020快速学习_2021公需科目快速学习方法
  19. Linux常用命令使用---su 与su -
  20. 【限时活动】京东全民营业辅助脚本网页版

热门文章

  1. [启动]Linux启动流程rcN.d rcS.d rc.local等
  2. 用计算机sp画笑脸,用AI技术给名画P上笑脸,看上去整幅画的画风都不好了……...
  3. 数字化转型小贴士和陷阱
  4. APP移动应用测试策略与工具思维导图
  5. ABP应用开发(Step by Step)-下篇
  6. mPaaS iOS框架笔记0-mPaaS iOS 框架初探(以MPH5Demo_plugin为例)
  7. 小学计算机学校教学计划,小学信息技术课程教学计划
  8. c语言编译器只有9行怎么添加,avr单片机c语言编译器(9页)-原创力文档
  9. Android设备与外接U盘实现数据读取操作
  10. 正则表达式练习题(含答案)