Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,2 @@
|
|||
int var = 3;
|
||||
int *pointer = &var;
|
||||
37
Task/Pointers-and-references/C/pointers-and-references-10.c
Normal file
37
Task/Pointers-and-references/C/pointers-and-references-10.c
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
#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;
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
int v = *pointer; /* sets v to the value of var (i.e. 3) */
|
||||
*pointer = 42; /* sets var to 42 */
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
int othervar;
|
||||
pointer = &othervar;
|
||||
|
|
@ -0,0 +1 @@
|
|||
pointer = NULL; /* needs having stddef.h included */
|
||||
|
|
@ -0,0 +1 @@
|
|||
pointer = 0; /* actually any constant integer expression evaluating to 0 could be used, e.g. (1-1) will work as well */
|
||||
|
|
@ -0,0 +1 @@
|
|||
pointer = (void*)0; /* C only, not allowed in C++ */
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
int array[10];
|
||||
pointer = array;
|
||||
/* or alternatively: */
|
||||
pointer = &array[0];
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
pointer += 3; /* pointer now points to array[3] */
|
||||
pointer -= 2; /* pointer now points to array[1] */
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
v = pointer[3]; /* accesses third-next object, i.e. array[4] */
|
||||
v = pointer[-1]; /* accesses previous object, i.e. array[0] */
|
||||
/* or alternatively */
|
||||
v = *(pointer + 3); /* array[4] */
|
||||
v = *(pointer - 1); /* array[0] */
|
||||
Loading…
Add table
Add a link
Reference in a new issue