
2.传递参数错误,pthread_create传递的是"&a",也就是数组的起始地址的地址,你只是改变数组值,不需要对起始地址更改,完全可以传递 a,而且看你thread_fun函数应该传递的是a。
3. 最关键的,我纳闷怎么没输出,检查了下你的thread_fun才发现“for(k=2k<=512k++)”,数组越界了! 造成的结果是把n值直接给改了。。
修改版 (有warning, 最好把参数设成void *):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>/*pthread_create()......*/
#include <unistd.h>
pthread_t ntid
void *thread_fun(int *p) {/*.......*/
int k
p[0] = 0
p[1] = 1
for(k=2k<512k++)
{
p[k] = p[k-1] + p[k-2]
}
return NULL
}
int main(void){
int err
int i,n
int a[512]
printf("Please enter n:(n>=3 &n<=512) ")
scanf("%d",&n)
/*........*/
err=pthread_create(&ntid,NULL,thread_fun,(void *)a)
if (err!=0) {
fprintf(stderr, "......: %s\n", strerror(err))
exit(1)
}
pthread_join(ntid,NULL)/*...1.....*/
for(i = 0 i<=n i++){
printf("F[%d] = %d\n",i,a[i])
}
}
50分就给你做一题吧。#!/bin/sh
#模拟计算器
case $2 in
1) sum=$(($1+$3))|echo "$1 + $3=$sum"
2) sum=$(($1-$3))|echo "$1 - $3=$sum"
3) sum=$(($1*$3))|echo "$1 * $3=$sum"
4) sum=$(($1/$3))|echo "$1 / $3=$sum"
esac
代码如下:
int a[20]={1,1};
printf(“%d\t%d\t”,a[0],a[1]);
for(int i=0;i<20;i++)
{
printf(“%d\t”,a[i]=a[i-1]+a[i-2]);
}
扩展资料:
如何掌握C语言基础知识及技巧:
首先准备一台PC,学编程一般对PC没有太大的要求,一般主流的配置就好。
有了电脑之后,就得考虑安装什么 *** 作系统了,主流使用的 *** 作系统是windows,不过在这里不建议学习C编程使用windows,建议使用Linux。所以学习者最好安装双系统,或者彻底习惯Linux系统。
不管学习哪门编程语言,都建议学习者必须有一本关于此语言的全面知识的书籍,大一般采用的是谭浩强老师的《C语言程序设计》,还有 《C语言C++学习指南》从入门到精通(语法篇)视频课程在线学习等,建议学习者可以去仔细研读
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)