How to Create Pointers in C
How to Create Pointers in C
Pointers are the nightmare of every new C programmer. However, they are also the feature that made C the widespread, powerful programming language it is until today. Like many other programming features and constructs, there is a systematic approach to creating and using C pointers. This article is a step-by-step guide to creating and using pointers in a clear and easy way.
Prerequisite Information

Decide the type of the pointer (that is, the type of data the pointer will be pointing to). The following tips might help: If you are declaring a dynamic array, use the array items' data type. If you are declaring the pointer to access the data of a variable, use the same data type as the variable. If you are declaring the pointer to traverse a list structure, use the list node data type (usually a user created struct). If you are declaring the pointer to traverse a tree, use the data type of the tree node, or a pointer to the tree node type as the type (pointer to a pointer of tree node type!).

Declare the pointer using a syntax like this: data-type * pointer-identifier; where data-type is the type you decided in step 1 pointer-identifier is the identifier or name of the pointer variable

Assign the pointer to an initial memory location. This can be done using one of the following methods: Allocating memory and pointing to it by the pointer: int * i = malloc(sizeof(int)*n); where n is the number of memory blocks to assign. Assigning the address of a variable to the pointer: int * i = & x; where "x" is an integer and (&) means address-of. Assigning an array identifier to the pointer: int * i = array1; where array1 is an integer array(int[] array1;). Assigning a reference to the pointer: int * i = a; where "a" is an integer reference (int & a;). Assigning another pointer to the pointer: int * i = z; where "z" is another integer pointer (int * z;)

Whenever you need to extract the data item currently pointed to by the pointer, use the value-at-address operator (*): int x = *i; where i is an integer pointer.

Use the indexing operator on the pointer as if it was an array whenever you want to get a memory location next to the pointer without actually advancing the pointer. For example, if you have an integer pointer i, you can use i[2] which will retrieve the integer that is after the integer immediately after the integer pointed to by the reference (the integer that is 2 integers after the current location). The pointer i will still be pointing to the same memory location. Another alternative to this is getting the value at the pointer 2 steps after this pointer: *(i + 2)

Use the increment(++), decrement(--), += and -= operators whenever you need to change the current location. i += 5; will advance the integer pointer i 5 integers forward.

After you finish using the pointer, if you allocated memory to that pointer, make sure you free the allocated memory using the free() function. (free(i); where i is a pointer)

What's your reaction?

Comments

https://tupko.com/assets/images/user-avatar-s.jpg

0 comment

Write the first comment for this!