Active Members MrGrj Posted August 17, 2015 Active Members Report Share Posted August 17, 2015 (edited) Pointer Cheat Sheet A pointer must always be of the same type as the variable it's pointing at. Declaring a pointer variable does not create the type of variable it points at. It creates a pointer variable. Though pointers are declared with an asterisk they are not always used with an asterisk. The asterisk is the unary * operator. It is not the * multiplication operator. Pointers must be initialized before they can be used. Initialize a pointer by assigning it to a variable; the variable must be of the same type as the pointer. To assign a pointer to a variable, use an ampersand with the variable's name. The address-of unary operator & is not the same as the bitwise & AND operator. m_address = &memory; To assign a pointer to an array, do not use the ampersand: s_address = string; The pointer s_address would be used on the string array's elements.To assign a pointer to an array element, use the ampersand: element = &string[2]; Without an asterisk, an initialized pointer holds a memory address.With an asterisk, an initialized pointer references the value stored at its address.Typical Pointer Setup and UseFirst, create a pointer of the proper type:float *f;Second assign it to a variable's memory location:f = &boat;Finally, use the pointer:printf("%.0f",*f);Without an asterisk, the pointer references a memory location.With an asterisk, the pointer references the value at that memory location.Always use the same type of pointer as the variables it examines: floats for floats, ints for ints, and so on.Remember: initialize a pointer before you use it! Set the pointer equal to the address of some variable in memory.Pointers, Parenthesis and Math[table=width: 500, class: grid, align: center][tr] [td]Pointer Thing[/td] [td]Memory Address[/td] [td]Memory Contents[/td][/tr][tr] [td]p[/td] [td]Yep[/td] [td]Nope[/td][/tr][tr] [td]*p[/td] [td]Nope[/td] [td]Yep[/td][/tr][tr] [td]*p++[/td] [td]Incremented after value is read[/td] [td]Unchanged[/td][/tr][tr] [td]*(p++)[/td] [td]Incremented after value is read[/td] [td]Unchanged[/td][/tr][tr] [td](*p)++ [/td] [td]Unchanged[/td] [td]Incremented after it's used[/td][/tr][tr] [td]*++p[/td] [td]Incremented before value is read[/td] [td]Unchanged[/td][/tr][tr] [td]*(++p)[/td] [td]Incremented before value is read[/td] [td]Unchanged[/td][/tr][tr] [td]++*p[/td] [td]Unchanged[/td] [td]Incremented before it's used[/td][/tr][tr] [td]++(*p)[/td] [td]Unchanged[/td] [td]Incremented before it's used[/td][/tr][tr] [td]p*++[/td] [td]Not a pointer[/td] [td]Not a pointer[/td][/tr][tr] [td]p++*[/td] [td]Not a pointer[/td] [td]Not a pointer[/td][/tr][/table]The ++ operator is used above, though any math operation can be substituted.A tip: Use parenthesis to isolate part of the pointer problem and the answer will always work out the way you intended.Pointers and array brackets[table=width: 500, class: grid, align: left][tr] [td]Array Notation[/td] [td]Pointer Equivalent[/td][/tr][tr] [td]array[0][/td] [td]*a[/td][/tr][tr] [td]array[1][/td] [td]*(a+1)[/td][/tr][tr] [td]array[2][/td] [td]*(a+2)[/td][/tr][tr] [td]array[3][/td] [td]*(a+3)[/td][/tr][tr] [td]array[x][/td] [td]*(a+x)[/td][/tr][/table]Ugly ** notation[table=width: 500][tr] [td]Doodad[/td] [td]What It Is[/td] [td]Seen by The Compiler[/td][/tr][tr] [td]array+1[/td] [td]An address[/td] [td]A pointer[/td][/tr][tr] [td]*(array+1)[/td] [td]Contents of address[/td] [td]A string[/td][/tr][tr] [td]*(*(array+1)) [/td] [td]Contents of a character array [/td] [td]A character[/td][/tr][tr] [td]**(array+1)[/td] [td]Same as above[/td] [td]Same as above[/td][/tr][/table] Edited August 17, 2015 by MrGrj 1 Quote Link to comment Share on other sites More sharing options...
gigiRoman Posted August 20, 2015 Report Share Posted August 20, 2015 Pe cand un articol despre smart pointers? Quote Link to comment Share on other sites More sharing options...