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++}}==