从不同大小的整数转换为指针?

时间:2014-11-24 16:48:40

标签: c

我必须做一个C项目,但我从未研究过C.编译器抱怨“从不同大小的整数转换为指针”。你能解释问题的本质以及如何解决它吗?

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>
#include <fcntl.h>
#include <time.h>
#include <stdint.h>
#include <pthread.h> //-lpthread commande

FILE* resultat=NULL; //déclaration d'un fichier nommé resultat qui contiendra les résultats issus du calcul des 3 fonctions

int T[199]; //déclaration d'un tableau de taille 199 en statique

static void *MARIT (void* i) //fonction qui calcul la moyenne arithmétique
{
    int s,j;
    int M1=0;

    //boucle qui calcul la moyenne arithmétique
    for (j=0;j<=150;j++)
    {
        s=(j*M1+T[j]);
        M1=s/(j+1);
        fprintf(resultat," Moyenne 1: %d \n",M1);//on écrit le résultat dans le fichier nommé resultat
    }

    return NULL;
}

static void *MQUAD (void* i) //fonction qui calcul la moyenne quadratique
{
    int s,j;
    int M2=0;

    //boucle qui calcul la moyenne quadratique
    for (j=0;j<=150;j++)
    {
        s=s+((T[j])*(T[j]));
        M2=sqrt(s/(j+1));
        fprintf(resultat," Moyenne 2: %d \n",M2);
    }

    return NULL;
    s=0;
}

static void *SCUB (void* i) //fonction qui calcul la somme des nombres cubique
{
    int s,j;
    int M3=0;

    //boucle qui calcul la somme des nombres cubique
    for (j=0;j<=150;j++)
    {
        s=M3+((T[j])*(T[j])*(T[j]));
        M3=s;
        fprintf(resultat," Moyenne 3: %d \n",M3);
    }

    return NULL;
}

int main (int argc, char* argv[]) {
    pthread_t tid1; //déclaration de 3 thread
    pthread_t tid2;
    pthread_t tid3;

    int M1,M2,M3;
    int f,i;
    int N=199;

    i=atoi(argv[1])-1; //remplace chaine de caractère par un entier (ici on demande à l'utilisateur d'entrer N)

    srand(time(NULL)); // initialisation de rand

    while (f<=N){ //Boucle qui permet de générer N nombres aléatoire stocké dans T
        T[f]= rand()%100; //N est demandé à l'utilisateur pour savoir combien il souhaite générer de nombres aléatoire
        printf("%i \n",T[f]);
        f++;
    }

    resultat=fopen("Resultatthread1.txt","w+"); //Création du fichier Resultat

    //creation des thread, 3 thread pour 3 fonctions
    pthread_create(&tid1,NULL,MARIT,(void *)i);
    pthread_create(&tid2,NULL,MQUAD,(void *)i);
    pthread_create(&tid3,NULL,SCUB,(void *)i);

    //Ici on attend la fin d'execution des 3 thread pour pouvoir terminer le programme
    pthread_join(tid1,NULL);
    pthread_join(tid2,NULL);
    pthread_join(tid3,NULL);

    return 0;
    fclose(resultat);
}

1 个答案:

答案 0 :(得分:0)

我认为这是错误的地方

pthread_create(&tid1,NULL,MARIT,(void *)i);

最后一个参数是指向任意线程数据块的指针。你不能像那样强制转换任意int。你假设int与指针的大小相同。