Grant Robinson wrote:
False (at least with g++ 4.0.1). The following code snippet
illustrates this:
#include <stdio.h>
int main(int argc, char **argv) {
char array1[32];
char *array2 = new char[32];
printf("location of array1: %p\n", array1);
printf("location of array2: %p\n", array2);
printf("address of &array1[0]: %p\n", &(array1[0]));
printf("address of &array2[0]: %p\n", &(array2[0]));
printf("address of &array1: %p\n", &array1);
printf("address of &array2: %p\n", &array2);
delete[] array2;
return 0;
}
Output on my machine:
location of array1: 0xbffff6fc
location of array2: 0x5002d0
address of &array1[0]: 0xbffff6fc
address of &array2[0]: 0x5002d0
address of &array1: 0xbffff6fc
address of &array2: 0xbffff6f8
What this says to me:
array1 == (&(array1[0])) == (&array1)
array2 == (&(array2[2]))
but
array2 != (&array2)
(parentheses are for clarity and/or to make Scheme and Lisp lovers
more comfortable)
:)
Look, the original poster just wanted to know how to print the address
of a character array. You just demonstrated that using the & operator
with array2 gives you the WRONG answer, which was my point originally,
so I stand behind my original argument in the context of the OP's
question. I wasn't saying that the & would never work, just that the OP
shouldn't use it to solve this problem. Your code defends that argument
pretty well.
By the way, the best answer was already given days ago with a simple
printf( "%p\n", var ), which I'm sure worked just fine without all the
pedantic ramblings about the intricacies of & and why C++ is so evil and
such (which I have thoroughly enjoyed). I sure hope the OP has moved on
to bigger and better problems to solve.
Lastly, to provide another answer to the poster without using printf(),
you could use cout in combination with a cast to get the answer like so:
char *array = "foobar";
cout << "The address is 0x" << hex << (unsigned int)array << endl;
Which also works just fine and does not use the & operator. This is
mostly for people who dislike including system headers that end with
".h". :)
--Dave
P.S. I happen to think C++ is a great language, and I use it in lots of
new projects all the time. I work with several hundred other people who
do the same thing. I've never run into a bug that was *caused* by a
deficiency in C++ that could not have been easily reproduced in other
languages. C++ is just fine for me. This from a person who has written
lots of Java, PHP, Python, and Perl code (and even a tiny bit of Scheme).
/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/