0

How to get address of a dynamically allocated char array ?

About some other ones like char* x = "123" and char x [ ] = { '2', 'a' } I found its legal way to do ( which is (void*) (x) ), but about this one, it was of no avail :( Please help me out, thanks👍 Example : Class A { public : ... char* data () { return &content; // returns address of content // illegal way to get its address // using ampersand } ... private : const int SIZE = 5000; char* content = new char [ SIZE ]; }

22nd Oct 2022, 8:57 PM
Ali_combination
Ali_combination - avatar
12 Respuestas
+ 3
Yes, you cannot return as void* if the return type is char*. A some_a; char* v = some_a.data(); cout << static_cast<void*>(v);
23rd Oct 2022, 9:17 AM
Ani Jona 🕊
Ani Jona 🕊 - avatar
+ 2
I am not sure exactly what you did before with the ampersand so that it worked. The trouble with C++ is that operators can come out of the box overloaded for various types with effects you wouldn't expect. Be sure to be absolutely aware of the type you are dealing with. When you used ampersand before, maybe you had a char** type. That is not char* and so you get a different effect of the << operator...
23rd Oct 2022, 9:24 AM
Ani Jona 🕊
Ani Jona 🕊 - avatar
+ 2
Ani Jona 🕊 I meant this : char* arr = new char [ 2 ]; arr [ 0 ] = '1'; cout << &arr; So we see that "cout << &arr;" gives the expected result, but doing the same by RETURNING it doesn't ... Thank you so much .
23rd Oct 2022, 9:33 AM
Ali_combination
Ali_combination - avatar
+ 2
Well, like I said, arr is char*, hence &arr is char**. While you did get an address, you got the address of the address of the array, not the address of tge array itself. You might want to compare the addresses by also casting arr to void* and print the address.
23rd Oct 2022, 9:42 AM
Ani Jona 🕊
Ani Jona 🕊 - avatar
+ 2
Ani Jona 🕊 I got it, thanks for your help ;)
23rd Oct 2022, 9:45 AM
Ali_combination
Ali_combination - avatar
+ 1
Just "return content;" ? The type of 'content' is already pointer to char. Ampersanding it makes it char**, which is not the methods return type.
23rd Oct 2022, 6:18 AM
Ani Jona 🕊
Ani Jona 🕊 - avatar
+ 1
It is a pointer. It IS the address.
23rd Oct 2022, 8:46 AM
Ani Jona 🕊
Ani Jona 🕊 - avatar
+ 1
Are you just cout'ing the returned value? If so, cout is overloaded for char*, i suspect, to print the content as C string and not the address. You can cast to void* before inserting into a stream.
23rd Oct 2022, 9:06 AM
Ani Jona 🕊
Ani Jona 🕊 - avatar
+ 1
Ani Jona 🕊 yes, I don't expect the C string result, but its 'address' . I tried 'return (void*) (content);', but there raised an error : invalid conversion from void* to char*
23rd Oct 2022, 9:13 AM
Ali_combination
Ali_combination - avatar
+ 1
Ani Jona 🕊 FIXED ! Thanks. But it's a bit strange to me, cout'ing the array using ampersand perfectly works and gives the expected result, but returning it doesn't, what's the reason ?
23rd Oct 2022, 9:20 AM
Ali_combination
Ali_combination - avatar
0
Ani Jona 🕊 'return content' only returns what it contains, not its address
23rd Oct 2022, 8:38 AM
Ali_combination
Ali_combination - avatar
0
Ani Jona 🕊 well I don't notice anything like 0x97645ba0, but only what it contains. Do you mean that its address is what it contains ?? >> content [ 0 ] = '1'; content [ 1 ] = '2'; >> return content; // output : 12
23rd Oct 2022, 8:53 AM
Ali_combination
Ali_combination - avatar