我是c ++的初学者,我的代码中出现两个错误,我不知道如何修复它们...... 第一个
非法间接
,第二个是
'='左操作数必须是I值。 (在行中:((ArrayPtr + i)+ j)= rand()%55 + 1)
有没有人知道如何修复它们?那是我的代码:
#include <iostream>
#include <math.h>
#include <time.h>
#include<iomanip>
#include<array>
#include <algorithm>
using namespace std;
const int AS = 6;
void FillingRandomly(int (*)[AS]);
void printing(int (*)[AS]);
int c;
int main()
{
int funny = 0;
int timpa = 0;
int counter = 0;
int Array[AS][AS];
srand(time(0));
FillingRandomly(Array);
cout << "The unsorted array is" << endl << endl;
printing(Array);
cout << "The sorted array is" << endl << endl;
printing(Array);
system("PAUSE");
return 0;
}
void FillingRandomly(int *ArrayPtr)
{
for(int i=0;i<AS;i++)
{
for (int j=0;j<AS;j++)
{
*(*(ArrayPtr +i)+j)=rand()%55+1;
}
}
}
void printing(int *Array)
{
for(int i=0;i<AS;i++)
{
for (int j=0;j<AS*AS;j++)
{
int counter = 0;
cout<<((Array[i] +j))<<setw(5);
if ((Array[i] +j)%AS == 0)
cout << endl << endl;
}
}
}
void forsorting(int *Brray, int funny)
{
int dice = 0;
int super = 0;
int space=0;
//Sorting Array[][] which is treated like Array[]
{
for (int pass = 0; pass < AS - 1; pass++) {
for (int k = 0; k < AS - 1; k++) {
int temp;
if(*(Brray+k)==*(Brray+k+1))
{
temp=*(Brray+k);
*(Brray+k)=*(Brray+k+1);
*(Brray+k+1)=temp;
}
}
}
}
}
答案 0 :(得分:3)
通过
*(*(ArrayPtr +i)+j)=rand()%55+1;
似乎你想要
ArrayPtr[i][j] = (rand() % 55) + 1;
你可以尝试一下
int const offset = AS * i + j;
int const elem = (rand() % 55) + 1;
*(ArrayPtr + offset) = elem;
答案 1 :(得分:2)
您的功能签名是:
void FillingRandomly(int *ArrayPtr)
你告诉编译器你传递了一个简单的指针,但是在行中:
*(*(ArrayPtr +i)+j)=rand()%55+1;
你正在进行双重引用,这是非法的并导致编译器抱怨
<强>补强>
我在另一个答案中看到了评论,因为我需要写的比保留的评论空间大,我决定补充我自己的答案。
您将Array
定义为:
int Array [AS] [AS];
实际上,你所做的是对编译器的承诺,你将使用定义的Array,但是编译器不太相信你,所以任何时候使用Array
编译器都会确保它被宣布使用。
当您声明FillingRandomly
函数时,会出现问题。在这里,您正在履行承诺,并尝试通过声明不同类型来使用Array
。请注意您如何声明您的功能:
void FillingRandomly(int *ArrayPtr)
由于c ++支持函数重载,编译器在发起链接阶段之前不会发出警告,当它无法找到签名为的函数时:
void FillingRandomly(int ArrayPtr[][AS])
请注意两者都不同。
一旦你是初学者,保持你的程序正确的最好方法是保持你的承诺不变。 Bellow我给你看了一段你自己的代码,纠正了FillingRandomly
函数的问题(你必须为其他函数纠正它):
const int AS = 6;
void FillingRandomly(int [][AS]); // Note that I've changed your prototype here
....
void FillingRandomly(int ArrayPtr[][AS]) // Keep your function signature the same as your prototype signature
{
for(int i=0;i<AS;i++)
{
for (int j=0;j<AS;j++)
{
ArrayPtr[i][j]=rand()%55+1; // Note how ArrayPtr is being used exactly as your promised early
}
}
}