*& question

Hi! Experts,

When I work on ObjectArx which is a library by AutoDesk to program with AutoCad, I met a defination like this:

Acad::ErrorStatus getName(const char*& pName) const;

I don't understand what char*& mean. I did the following:

char name[20];
char* rname = name;
acutPrintf("\nThe block name is : %s", rname);

acutPrintf is similar to printf. It works.

But if I write

acutPrintf("\nThe block name is : %s", name);

It gives me junk chars.

If I write

char name[20];

The compiler gives me an error saying it can not convert char[20] to char*&.

What is the mystic *& mean?

Thanks for your help.

Who is Participating?
Here's the explanation

In C, when u need to modify the contents of a variable, u pass the address of the variable and recieve it in a pointer variable of the same type. Using the pointer u can change the contents of your variable.

But if u need to change the contents of the pointer itself, i.e. make the pointer point to something else using a function, then u need to pass the address of the pointer variable, For this case the function would be taking a pointer to a pointer argument
void f ( int ** p ) ;
Inside f(), u would have use the cumbersome syntax for referring to the double pointer

Now C++ makes this easy by letting u pass a pointer by reference and that is what u asked for
getName(const char*& pName)

means pName is a reference to a pointer to a char const

Regarding ---------The compiler gives me an error saying it can not convert char[20] to char*&.====

Any statically declared array [e.g. char a[20]] is by definition a const pointer. Now Your function is trying to pass a reference to the pointer, thus it runs the risk of changing it i.e. making it point to something else, but this is not allowed for a const pointer OR an array.

That's the reason for the error


>>I don't understand what char*& mean

This means that the function takes a reference to a pointer. Technically speaking, the result is similar to using a 'char**'

>>if I write
>>acutPrintf("\nThe block name is : %s", name);
>>It gives me junk chars.

Yes, because 'pname' no longer points to 'name'.


strcpy ( name, pname);

before, and it will work.

BTW, the behaviour would be the same if you used

void ChangeThePointer ( char*& p) {

   p = "ChangeThePointer";

char* p = "test";

printf ( "before: %s\n", p);

ChangeThePointer ( p);

printf ( "after: %s\n", p);
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.

>>Here's the explanation

Haven't I already posted that?
jzzhangAuthor Commented:

It looks like
getName(const char*& pName)
means pName is a reference to a pointer to a char const

I will test it.

Be back soon.

jzzhangAuthor Commented:

I tested it. It works. So char*& should be interpreted as a reference to a char pointer.

Here is the small test code:

bool AllocStr(char*& szStr)
      szStr = new char[15];
      lstrcpy(szStr, "This is a test");
      return 1;

int main()
      char* psz;

      wsprintf(g_szMsg, "Allocated string (%s) length is %d", psz, lstrlen(psz));
      delete psz;

Then, how to accept your answer?

I guess when u open this question, against each of the answers, u get a button for accepting a particular answer.

U can also give grades to the answer.

read the help for Accepting a Answer
Here's the link for the help

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.