C程序未编译

时间:2013-04-20 07:09:51

标签: c

我需要找到最大的数字(这是一个双倍)。我的计划有什么问题?它没有编译。

#include<stdio.h>
#include<stdlib.h>

void dobig(double *parr[5],int *len,double *big);

void main()
{
    double *big;
    double arr[5]={1.00,2.321,3.54337,4.333333,5.5555555};
    double *parr=&arr[5];
    int size=sizeof(arr)/sizeof(int);
    int *len=&size;
    dobig(parr,len,big);
    printf("the largest number is %p/n",*big);
    system("pause");
}

void dobig(double *parr,int *len,double *big)
{
    int i;
    double pbig=*parr;
    for(i=0;i>*len;i++)
    {
        if(pbig<*(parr+i))
        {
            pbig=*(parr+i);
        }
        *big=pbig;
    }
}

3 个答案:

答案 0 :(得分:1)

这是一个问题:

double *parr=&arr[5];

arr只有5个元素。因此有效的索引范围为0 - 4。

我在代码中评论了这些问题:

#include<stdio.h>
#include<stdlib.h>

void dobig(double *parr,int *len,double *big); // Prototype didn't match. You want to 
       // pass a pointer, not an array of pointers.

    int main(int argc, char *argv[]) // Standard way to write main()
    {
    double big;
    double arr[5]={1.00,2.321,6.54337,4.333333,5.5555555};

    double *parr=&arr[0]; // If you want to loop through the array 
           //in dobig(), you have to pass the pointer to the first element or 
           //char   *parr=arr; is also fine.

    int size=sizeof(arr)/sizeof(double); // You want to know how many double's 
                  // are there in the array. So use sizeof(double)
    int *len=&size;
    dobig(parr,len,&big);
    printf("the largest number is %f\n",big); // To print a double, 
                                   //use %f. %p is for pointer.
    }

    void dobig(double *parr,int *len,double *big)
    {
    int i;
    double pbig=*parr;
    for(i=0;i<*len;i++)  // Here it doesn't enter the
                // loop at all due to incorrect condition.
    {
        if(pbig<*(parr+i))
        {
           pbig=*(parr+i);
        }
    }
    *big=pbig;
    }

答案 1 :(得分:0)

变化

void dobig(double *parr[5],int *len,double *big);

void dobig(double *parr, int *len, double *big);

注意:我建议您不要使用void main,而应使用int main

答案 2 :(得分:-1)

U正在传递数组,因此您需要在dobig函数中使用双指针

这是您需要更正的代码。

  #include<stdio.h>
  #include<stdlib.h>

void dobig(double *parr[5],int *len,double *big);

int  main()
{
double *big;
double arr[5]={1.00,2.321,3.54337,4.333333,5.5555555};
double **parr=&arr[5];
int size=sizeof(arr)/sizeof(int);
int *len=&size;
dobig(parr,len,big);
printf("the largest number is %p/n",*big);
system("pause");
}

void dobig(double **parr,int *len,double *big)
{
int i;
double pbig=**parr;
for(i=0;i>*len;i++)
{
if(pbig<**(parr+i))
{
   pbig=**(parr+i);
}
*big=pbig;
}
}
相关问题