我需要找到最大的数字(这是一个双倍)。我的计划有什么问题?它没有编译。
#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;
}
}
答案 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;
}
}