Pointers and references: Difference between revisions
Content deleted Content added
m →{{header|Perl 6}}: we no longer have a Parcel type |
|||
Line 169: | Line 169: | ||
v = *(pointer + 3); /* array[4] */ |
v = *(pointer + 3); /* array[4] */ |
||
v = *(pointer - 1); /* array[0] */</lang> |
v = *(pointer - 1); /* array[0] */</lang> |
||
The following code snippet shows a practical example of using pointers in C with structs. Note there are many ways to access to a value using the * operator. |
|||
<lang c>#include <stdio.h> |
|||
#include <stdlib.h> |
|||
typedef struct { |
|||
int val; |
|||
} num; |
|||
int addNodes(num **array, int elems); |
|||
int main(void) { |
|||
int numElems, i; |
|||
num *arr = NULL; |
|||
numElems = addNodes(&arr, 10); |
|||
for (i = 0; i < numElems; i++) { |
|||
printf("%d) %d\n", i+1, arr[i].val); |
|||
} |
|||
free(arr); |
|||
return 0; |
|||
} |
|||
int addNodes(num **array, int elems) { |
|||
num *temp = NULL; |
|||
int i; |
|||
for (i = 0; i < elems; i++) { |
|||
temp = realloc(*array, (i+1) * sizeof **array); |
|||
if (temp == NULL) { |
|||
free(*array); return -1; |
|||
} else { |
|||
*array = temp; |
|||
} |
|||
(*array)[i].val = i; |
|||
// Alternatives: |
|||
// ((*array)+i)->val = i; // or |
|||
// (*((*array)+i)).val = i; |
|||
} |
|||
return i; |
|||
}</lang> |
|||
=={{header|C++}}== |
=={{header|C++}}== |