Click here to Skip to main content
15,924,039 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
So I am attempting to complete an assignment using 2d pointer arrays. I was going through the process when I realized that was one of the requirements was that I was supposed to use pointer arithmetic, but instead I have been using offset notation. So my question for you guys is what is the best method of converting my offset notation into pointer arithmetic without completely rewriting the program??? Also when transversing through my 2d array what parameters do I call for my outofbounds function in order for it to properly work? Any suggestions would be greatly appreciated and thank you in advance.

//move through string by parsing  to insert each char into array element position

void rules(char** boardArr,int  &rows, fstream inFile, string &line, int &cols)
{
    char* pos;
    char ncount;
    for(int i = 0; i < rows; i++) //rows
    {
        getline(inFile, line);

        for(int j = 0; j < cols; j++) //cols
        {
            *(*(boardArr + i )+ j) == pos;//parsing string into bArr

            //neighbor check nested for organism
            pos  = *(*(boardArr + i)+ j);//position of index within
            if(*(*(boardArr + i+1)+ j)=='*')//checking pos to the right of pos index
            {
                //outofbounds()
                ncount++;
            }
            if(*(*(boardArr + i-1)+ j)=='*')//checking pos to the left of pos index
            {
                //outofbounds()
                ncount++;
            }
            if(*(*(boardArr + i)+ j+1)=='*')//checking pos to the above of pos index
            {
                //outofbounds()
                ncount++;
            }
            if(*(*(boardArr + i+1)+ j+1)=='*')//checking pos to the above and to the right of pos index
            {
                //outofbounds()
                ncount++;
            }
            if(*(*(boardArr + i-1)+ j+1)=='*')//checking pos above and to the  left of pos index
            {
                //outofbounds()
                ncount++;
            }
            if(*(*(boardArr + i-1)+ j-1)=='*')//checking pos below and to the left of pos index
            {
                //outofbounds()
                ncount++;
            }
            if(*(*(boardArr + i-1)+ j)=='*')//checking pos below of pos index
            {
                //outofbounds()
                ncount++;
            }
            if(*(*(boardArr + i-1)+ j+1)=='*')//checking pos below and to the right of pos index
            {
                //outofbounds()
                ncount++;
            }
            //row[i, row[i]-1])
            //cout<<*(*(boardArr + i)+ j);//assigning position to check for neighbors

        }



    }

//how to move through 2d array pointer arithmetic style

//boardArr[rows][cols] == *(*(boardArr + rows)+ cols)

//keep relationship between the numbers
//*(())
//If a cell contains an organism and has fewer than 2 neighbors, the organism dies of loneliness.
//A neighbor is an organism in one of the 8 spots (or fewer if on the edge) around a cell
//If a cell contains an organism and has more than 3 neighbors, it dies from overcrowding.
// If an empty location has exactly three neighbors, an organism is born in that location.
//returns nothing
}
bool  outofbounds( int &rows, int &cols, int i, int j)
{
    if((i >0 && i< rows)  && (j < cols && j > 0))
    {
        return true;
    }
    else
        return false;
}


What I have tried:

Googling proper documentation of pointers
Contemplated starting over.
Posted
Updated 9-Oct-18 20:22pm

C++
*(*(boardArr + i )+ j) == pos;//parsing string into bArr

//neighbor check nested for organism
pos  = *(*(boardArr + i)+ j);//position of index within

One of the worst ways to address memory in any language; just don't do it. And the first statement does nothing, but if you meant to write a single = sign, first time round pos has no value so that will cause problems.

Start by setting pointers to each part of the array e.g.
C++
pos = *boardArr;  // point to the first element of boaradArr

I am not sure what the rest of the code is supposed to be doing so it is difficult to add more. Suffice to say you can create other pointers as positive or negative offsets from pos.
 
Share this answer
 
This code should do the job.
C++
char** pointer = boardArr;//set initial running 
for(int i = 0; i < rows; i++) //rows
{
    getline(inFile, line);

    for(int j = 0; j < cols; j++) //cols
    {
        *pointer = pos;//parsing string into bArr
        pointer++;//move pointer one memory block size
    }
    pointer++;//move pointer one memory block size
Please test that the ++ operator does the correct job.

Remark: when you work one column, the next offset starts after the column. So
C++
int offset = (i * row) + j;//imagine a chess board
PS: my experiences saying that careful bounds checking is the fundament of pointer arithmetics. It is a common source of problems :-O
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900