LINUX 传递‘pthread_create’的第 3 个参数时在不兼容的指针类型间转换

LINUX 传递‘pthread_create’的第 3 个参数时在不兼容的指针类型间转换,第1张

需要修改的不是pthread_create的第3个参数,而是第3个参数对应的线程函数的函数原型,线程函数的原型是这样的形式:void *(*start_routine) (void *)线程函数的参数和返回值都是一个void指针,而你写的线程函数的参数却是一个int指针,把线程函数的参数修改成void *类型就可以了。如果你需要int型,可以这样写(用强制类型转换,因为线程函数的参数是void *,所以这在线程函数内部经常这样用):void * xxx(void *xa){printf("Thread function argument was %d\n", *(int *)xa)......}

直接用 p = a  就可以初始化了.写了一个简单的程序来验证,你可以看一下.

#include <stdio.h>   // 头文件,用于调用 putchar 函数

main(){

int a[10] = { 1,3,5,7,9,11,13,15,17,19},*p  //初始化

char i

p = a // a 本身也是指针,在C 语言里,数组名就是一个

指针,所以可以直接传递

for(i = 0i < 10i++){  //验证部分,看 p 是否指向 数组 a

printf("%7d",*p)

p++ //令 p 指向下一个数组元素

}

putchar('\n') //换行指令

}

----------------------------------------------------------------------------------------

运行结果:

你没有为指针复制,在声明char *k, *j后,应该为其显示的分配内存:

k = (char *)malloc(10 * sizeof(char))

j = (char *)malloc(10 * sizeof(char))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9009765.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存