9

What would be a declaration likechar *song; What does the * does? Is it an array, a pointer or something else?

Bernardo Meurer
  • 2,295
  • 5
  • 31
  • 52
  • If i had one i would guess its a pointer, but i'm not sure, thats why i'm asking – Bernardo Meurer Jul 19 '13 at 15:27
  • 1
    Yes, it is indeed a pointer, but here is something you should read: [1](http://webcache.googleusercontent.com/search?q=cache:ZeMBWj5-UpIJ:www.iu.hio.no/~mark/CTutorial/CTutorial.html+&cd=1&hl=hu&ct=clnk&gl=hu) (but insert `int main()` because it's ancient), [2](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –  Jul 19 '13 at 15:29

2 Answers2

8

The * (Asterisk) indicates the variable is a pointer. As for a small example:

int x = 0;
int *y = &x; //y is pointing to x
const char* myText = "Text";

You might however be interested in learning a bit more about what pointers are.

Floris Velleman
  • 4,848
  • 4
  • 29
  • 46
  • 1
    Thanks, i got a little confused because i have a huge declaration, like this `char *song = "smb:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6"` So i didn't know if it was an array or what – Bernardo Meurer Jul 19 '13 at 15:31
  • 2
    @BernardoMeurerCosta The string literal is an array itself, but it can decay into a pointer to its first element. –  Jul 19 '13 at 15:33
4

H2CO3 is right, you should read up on c, and pointers.

char *song =  "smb:d=4,o=5,b=......."

Is the does the same thing as the code below

char song[] = "smb:d=4,o=5,b=......."

In both cases song is a pointer to an array of strings. C++ has a string object, but plain C used c_strings. A c_string is simply a char array. You have what looks like a c_string.

 *song       //the same as "song[0]" will equal 's' 
 *(song+1)   //the same as "song[1]" will equal 'm'
 *(song+2)   //the same as "song[2]" will equal 'b'

and so on

John b
  • 1,338
  • 8
  • 16