views:

67

answers:

5

I have a set of numbers that I need to pass from a function to a few other functions before it is actually used. I figured an array is a good way to do this, however I can't remember how to do what I want to do. The code looks like this

int set1; // variables that hold settings
int set2;
int set3;
cout << "Setting 1";
cin >> set1;
cout << "Setting 2";
cin >> set2;
cout << "Setting 3";
cin >> set3;
int settings[3] = {set1, set2, set3}; //array that holds variables

so that is how the array is created.
However what I am hoping is to be able to do something like this, I know some languages can ( I am pretty sure), but I don't know if C++ can, or what this method is even called (so I can't google it)

int setting0;
int setting1;
int setting2;
    for(int i=0; i<3; i++)
    {
          setting+i = setting[i]; // should set setting0 = setting[0]; etc
    }

Am I going about this the wrong way?

A: 

You can't reference variables from a name computed at runtime like that in C++. Your options are either to pass the array itself directly to the function in question (this is probably the best approach) or to bind the variables manually at compile time:

// NOTE - this is ALMOST ALWAYS not the right thing to do!
int setting0 = setting[0];
int setting1 = setting[1];
int setting2 = setting[2];
bdonlan
+4  A: 

There's no way to do this without initially using an array (i.e., int set[3]), or doing something more complicated than your first example.

Of course, you can rewrite your code, such as

int settings[3];
for (int i = 0; i < 3; ++i)
{
    cout << "Setting " << i+1;
    cin >> settings[i];
}
rlbond
A: 

I think this is the wrong approach. If you are passing an array, why not use the values in the array?

Like, instead of

printf("Hello %s",setting3);

do

printf("Hello %s",setting[3]);

or if you want to be fancy and use an associative array

printf("Hello %s",setting['first_name']);
Ryan Gooler
A: 

Sorry, this was a dumb question, I need to take a break. What I will do is set all the cin >> setting[0]; etc. I don't know what I was thinking, can I unask, lol.

Barrett
A: 

If the functions you're calling need to change the array content, Change your array decl to this:

int *(settings[3]) = {&set1, &set2, &set3}; //array that holds pointers to variables

Then change your loop to:

for(int i=0; i<3; i++)
{
 *(settings[i]) = setting[i]; // should set set1 = setting[0]; etc
}

Not sure if I understood your question quite right...

Graham Perks