• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 391
  • Last Modified:

[noob][c++] passing by reference, pointers how

how do I pass an array of strings by value, and by reference?


int ( int n, string array1 )   ?




to access it in the function

is this what i do?



*array[n]


?
0
Troudeloup
Asked:
Troudeloup
  • 9
  • 5
  • 5
  • +1
13 Solutions
 
AxterCommented:
To pass an array of strings by pointer, you can just use the following:

void function(string *array, int Qty);

Call it like this:

string Myarray[123];

function(Myarray, 123);
0
 
Infinity08Commented:
>> how do I pass an array of strings by value, and by reference?

You don't pass an array by value, but by reference :


void fun(std::string arr[]) {
    std::cout << arr[0];
}
 
std::string array[5] = { "this", "is", "a", "test", "array" };
fun(array);

Open in new window

0
 
jkrCommented:
E.g.

int func( int n, string array1 );

would pass the parameters per value, whereas

int func( int& n, string& array1 );

uses references. To pass data by reference, simply use a reference. You could also use pointers like in

int func( int* n, string* array1 );

but a reference is easier to handle, since it cannot be NULL.
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
AxterCommented:
To pass an array by reference is a bit trickier.
It's better to create a type def, and then pass the reference of the type def.
0
 
jkrCommented:
0
 
AxterCommented:
Here's an example for passing by reference, without using typedef.



void function( string (&Myarray)[123] )
{
}
 
//Example usage:
string Myarray[123];
 
function(Myarray);

Open in new window

0
 
AxterCommented:
FYI:
>>void fun(std::string arr[]) {

That's really passing an array by pointer.
Same thing as the following:
void fun(std::string *arr)

To pass by reference you use the following syntax:
void function( string (&arr)[5] )
0
 
TroudeloupAuthor Commented:
in short,

#include <iostream>
using namespace std;

int test ( *array );

int main()
{
    string stringarray[400];
   
    test ( stringarray)
   
}


int test ( *array )
{
    return array;
}








?
   
0
 
TroudeloupAuthor Commented:
and change * to & for reference?
0
 
AxterCommented:
A more readable method is to use the typedef.
Example:

typedef string StringArrayOf123[123];
 
void function( StringArrayOf123 &array )
{
}
 
//Example usage:
StringArrayOf123 Myarray;
 
function(Myarray);

Open in new window

0
 
jkrCommented:
Make that

#include <iostream>
using namespace std;

int test ( string*& );

int main()
{
    string stringarray[400];
   
    test ( stringarray)
   
}


int test ( string*& array )
{
    return 0;
}

0
 
TroudeloupAuthor Commented:
wait a minute,

I thought * is supposed to be in the front!

and
what's


*&?
0
 
jkrCommented:
BTW, you might be better off with a 'vector<string>' for that, e.g.

#include <iostream>
using namespace std;

int test ( vector<string>& );

int main()
{
    vector<string> stringarray;
   
    test ( stringarray)
   
}


int test ( vector<string>& array )
{
    return array.size();
}
0
 
AxterCommented:
Example for a reference:

#include <iostream>
using namespace std;
 
typedef string StringArrayOf400[400];
 
int test ( StringArrayOf400 &array );
//or
int test ( string (&array )[400]);
 
int main()
{
    string stringarray[400];
   
    test ( stringarray)
   
}
 
 
int test ( StringArrayOf400 &array )
{
    return 0;
}

Open in new window

0
 
TroudeloupAuthor Commented:
no no , no vector for now

i need to learn the dumb way of reinventing the wheels for at least another month
0
 
jkrCommented:
>>what's
>>*&?

That is a reference to a pointer. Regular arrays in C/C++ when used without [] are treated like a pointer to the 1st element, thus the notation.
0
 
AxterCommented:
For pointer:


int test (string *array, int Qty);
 
int main()
{
    string stringarray[400];
   
    test ( stringarray, 400)
   
}
 
int test (string *array, int Qty )
{
    return 0;
}

Open in new window

0
 
Infinity08Commented:
>> >>void fun(std::string arr[]) {
>> 
>> That's really passing an array by pointer.

Depends what definition you use for "by reference" :

        http://www.parashift.com/c++-faq-lite/value-vs-ref-semantics.html#faq-31.1

And it also depends on what Troudeloup meant ...
0
 
TroudeloupAuthor Commented:
i wasn't sure (am still not) about the terms ..
0
 
AxterCommented:
>>Depends what definition you use for "by reference" :

In C++ context, it would be a pointer, and not a reference.
One of the main difference between a pointer and a reference, is that a pointer can be reassigned to point to something else.
You can't do that with a reference.
Example:
void fun1(string arr[])
{
      arr = NULL; //This will compile
}

void ThisWillNotCompile( string (&array )[5] )
{
      arr = NULL; //This will NOT compile
}
 

int main(int argc, char* argv[])
{
      std::string array[5] = { "this", "is", "a", "test", "array" };
      fun1(array);
      ThisWillNotCompile(array);

      return 0;
}

If variable arr was a reference, then you would get a compile error if you tried to assign it to NULL.
You'll notice that func1 compiles, because it's not passing by reference.  The second function does not compile, because it is passing in by reference, and you can not reassign a reference.

That's one was you can tell if you have a reference or a pointer.
0
 
AxterCommented:
In other languages, a reference means something different, so my above comments only applies to C++ context.

For example, in Java, a reference is really what C++ would call a pointer.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 9
  • 5
  • 5
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now