无法理解错误的原因非法使用指针?

时间:2014-06-11 13:33:05

标签: c++ arrays pointers

   #include <iostream>
    #include <conio>
    #include <math>

    using namespace std;

    void main()
    {
        double b[1000], mxrs[1000],mnrs[1000], ls[1000]; int t, i;
        clrscr();
        cin>>t;
        for(i=0;i<t;i++)
        cin>>b[i]>>ls[i];
        for(i=0;i<t;i++)
        {
            mxrs[i]=sqrt(ls*ls+b*b);
            mnrs[i]=sqrt(ls*ls-b*b); cout<<mnrs[i]<<' '<<mxrs[i]<<'\n';
        }
        getch();
    }

我在这段代码中得到4个错误......

  

main.cpp | 16 |错误E2087:在函数main()|中非法使用指针   main.cpp | 16 |错误E2087:在函数main()|中非法使用指针   main.cpp | 17 |错误E2087:在函数main()|中非法使用指针   main.cpp | 17 |错误E2087:在函数main()|中非法使用指针   || ===构建完成:4个错误,0个警告=== |

请帮我纠正错误,即使你只告诉我错误的原因也会有所帮助。提前谢谢!

3 个答案:

答案 0 :(得分:0)

ls,bs指的是数组的基址。所以他们的地址不是价值。我认为这是你打算做的。

#include <iostream>
#include <conio>
#include <math>

using namespace std;

void main()
{
    double b[1000], mxrs[1000],mnrs[1000], ls[1000]; int t, i;
    clrscr();
    cin>>t;
    for(i=0;i<t;i++)
    cin>>b[i]>>ls[i];
    for(i=0;i<t;i++)
    {
        mxrs[i]=sqrt(ls[i]*ls[i]+b[i]*b[i]);
        mnrs[i]=sqrt(ls[i]*ls[i]-b[i]*b[i]); cout<<mnrs[i]<<' '<<mxrs[i]<<'\n';
    }
    getch();
}
让我们举一个简单的例子来理解这个概念:

int a[5]={1,2,3,4,5};
cout<<*a; //prints the value at base address which is 1 as a refers to a[0]
cout<<a[0]; //prints 1 
cout<<*(a+1); //prints 2 ... as a+1 refers to the address next to its base which is a[1] and which is 2   
cout<<a[1];//prints 2

答案 1 :(得分:0)

当您撰写double b[1000]时,您可以通过撰写b[n]*(b + n)来访问数组元素,注意将n保留在界限内 of the array。

因此*bb[0]是等效的。换句话说,b是数组第0个元素的指针。写b * b是试图将两个指针相乘,这是没有意义的。这就是编译器告诉你的。

要乘以数组元素,请使用b[n] * b[m]*(b + n) * *(b + m)

(并修正main的返回类型:它应为int。)

答案 2 :(得分:-1)

你放#include <math>,应该是#include <math.h><iostream><conio>也是如此。你忘记了所有这些.h