+ 5
Please tell me how it ends like this..
#include <iostream> using namespace std; int main() { char * c="c+"; cout<<c; c++; cout<<c; return 0; } //output: c++ It is one of the challenges I met. I have no idea now..
7 Réponses
+ 12
well a lot of people have difficulties with pointers, I don't like them either. The key to this is in
char * c = "c+"
two things happen in that line you get "c+" put somewhere in the memory and the variable c which holds the memory address of it.
the first cout prints "c+", then you move the pointer to the right and it no longer points at the beginning but to the "+", that's why the second cout prints only +. When you collect the two outputs you get:
"c+" + "+" = "c++".
+ 7
@branko - that actually is a question which requires knowledge in C++ and the way it uses pointers more advanced than mine...
@Hatsy, @Ace, @Valentine - a bit of help here...
+ 6
@branco - you triggered my curiosity, so I did some research. Seems like this is how << of cout works when you pass a char pointer (trying to be clever and assuming that in this case you want to print the whole string). Seems like that is something inherited from the way C handles strings and if you actually need the address you need to create pointer to that pointer.
If anyone can explain it better I would also love to read that explanation 😆
+ 3
Wow it's amazing!!! you opened my eyes!!!Thank you!!wowowowowow
+ 2
@Nikolay Nachev
why doesn't "cout <<c" print the memory location stored in the pointer? I thought you would have to dereference the pointer to get the "c+" inside the variable to output instead?
+ 2
@Nikolay Nachev
that's really interesting haha, I definitely need to read up some more on pointers as well, thanks for the information!
+ 1
This is an example of what is called "pointer arithmetic." Here is a picture of how the pointer looks in memory:
Memory... | C | + | memory...
^
Pointer is pointing to the first character in the string. When the first cout command is issued, it outputs what the pointer is currently pointing to (c in this case).
When the command c++ is issued, the pointer advances in memory to the next character in the string. Here is a picture of what the pointer looks like in memory after the c++ command :
Memory... | C | + | memory...
^
Pointer is now pointing to the + character. So, when the next cout command is entered, the character that the pointer is pointing to (which is now +) is outputted.
Hope this helps, let me know if you have more questions!