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])
}
}
1. 用vi打开一个空文件,文件名随意,然迅含后在第一行写:#!/bin/bash
另起一行跟上要使用的命令,比如ls date之类的,一条命令一行。
退出vi后,在命令行下输入 chmod +x 文件名 给文件增加运行权限
最后用 ./文件名 执行这个文件就可以了。
2. 环境变量用 env 和 set 2个命令可以看到,在亩首笑命令行下芹神直接输入就可以了,至于具体内容,太多,你得自己去查
3.
for 循环:
i=1
for i in 1..100do
i=$(($i + 1))
done
while循环
i=1
while [ $i -le 100 ]do
i=$(($i + 1))
done
算了,这些都能做,但做起来太麻烦,放弃了
先占下楼层,空了慢慢给你做!先做第一题1月12日:
#!/bin/bash
echo this "date" :`date`
echo this "cal" :`cal`
echo this "pwd" :`pwd`
echo this "ls" : `ls`.
第二题衡运1月12日:
这个没法写了撒 太笼统;建议翻翻书。
我列个环境变量的例子吧:
#!/启拦握bin/bash
echo "第二题悄庆":
TEST_DIR=/root
export $TEST_DIR
echo "环境变量TEST_DIR是/root".
第三题1月12日:
#!/bin/bash
echo "第三题for":
echo "3.1 for"
x=0
for ((i=1 i<101 i++))
do
x=$(($x+$i))
done
echo $x
echo "---------------------------------"
echo "第三题while":
echo "3.2 while"
x=0
i=1
while [ $i -lt 101 ]
do
i=$(($i+1))
x=$(($x+$i))
done
echo $x
第三题第二个
#!/bin/bash
echo "3.2"
function fib {
if [ $1 -lt 2 ]then
echo -n $1
else
local n_2=$(($1 - 2))
local n_1=$(($1 - 1))
local f_n_2=$(fib $n_2)
local f_n_1=$(fib $n_1)
local f_n=$((f_n_2 + f_n_1))
echo -n $f_n
fi
}
n=10
for ((i = 0i <$ni++))
do
printf "fib(%2d) = %d\n" $i $(fib $i)
done
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)