Go slow on the topic of pointers. 'C' gives great flexibility in accessing our data (and WHERE and HOW that data is accessed). With such power comes the opportunity to have unexpected program behavior, or quite cryptic bugs. It behooves us to be extra careful. In this installment, '&' and '*' are presented.
/* pgm8 source */
#include <stdio.h>
int main(void) {
char char_var; // data will be held in this variable
char *char_pntr; // AN ADDRESS will be held in this (pointer) variable
printf("\n");
char_var = 'Q';
printf("'char_var' contains: %c\n", char_var);
printf("The address of variable 'char_var': %p\n\n", &char_var);
char_pntr = &char_var; // initialize char_pntr to HOLD THE memory ADDRESS of char_var
printf("'*char_pntr' contains: %c\n", *char_pntr);
printf("The address of variable 'char_pntr': %p\n\n", &char_pntr);
printf("\n");
return(0);
}
So, the variable 'int days;' stores an integer. The variable 'int *pnt_days;' stores the ADDRESS of an integer variable. "pnt_days = &days;" assignes the ADDRESS of 'days' to the pointer 'pnt_days'. You may notice that each time you run pgm8, the memory addresses change. That's because the operating system - at any given moment - will assign program space & memory "on the fly".