1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#define log_addr(n) printf("%s == %p\n", (#n), (void*) (n));
#define log_str(n) printf("%s == \"%s\"\n", (#n), (n));
int main(int argc, char* argv[]) {
char const* str = "Hello World";
log_str(str);
char const** a_str = &str;
// constsant is **a_str
log_addr(a_str);
log_str(*a_str);
*a_str = "Goodbye";
log_str(*a_str);
// *a_str can be modified, **a_str cannot
//**a_str = 'H';
log_str(*a_str);
char stack_str[] = "Hello";
char* a_stack_str0 = stack_str;
char * const* a_constant_str = &a_stack_str0;
// constant is *a_constant_str
log_addr(a_constant_str);
log_str(*a_constant_str);
// cannot change *a_constant_str
//*a_constant_str = "Goodbye";
log_str(*a_constant_str);
**a_constant_str = 'Y';
log_str(*a_constant_str);
char const* const* a_fully_const_str = &str;
// constant is **a_fully_const_str and
// *a_fully_const_str
log_addr(a_fully_const_str);
log_str(*a_fully_const_str);
// both const means I cannot modify
// *a_fully_const_str or **a_fully_const_str
//*a_fully_const_str = "Goodbye";
//**a_fully_const_str = 'H';
// subtle discards a const
//a_str = &a_stack_str0;
//log_addr(a_str);
//log_str(*a_str);
char ** const a_const_str = &a_stack_str0;
// const is a_const_str
log_addr(a_const_str);
log_str(*a_const_str);
**a_const_str = 'A';
log_str(*a_const_str);
*a_const_str = "Goodbye";
log_str(*a_const_str);
a_const_str = &a_stack_str0;
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2024 Alexander J. Quinn & David Burnett This content is protected and may not be shared, uploaded, or distributed.