Add some theory for pointers
This commit is contained in:
parent
69ca802606
commit
907c7662a7
3 changed files with 72 additions and 0 deletions
38
c_modern_approach/Pointers/combining_operatnds.c
Normal file
38
c_modern_approach/Pointers/combining_operatnds.c
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#define ARRAY_SIZE 10
|
||||||
|
void print_array(int a[], int array_size) {
|
||||||
|
printf("[");
|
||||||
|
int *p;
|
||||||
|
for (p = a; p < a + array_size; p++) {
|
||||||
|
if (p == &a[array_size - 1]) {
|
||||||
|
printf("%d", *p);
|
||||||
|
} else {
|
||||||
|
printf("%d, ", *p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("]\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int a[ARRAY_SIZE] = {1, 2, 3, 4, 5, 6, 7, 80, 90, 100};
|
||||||
|
print_array(a, ARRAY_SIZE);
|
||||||
|
printf("*a:\t%d\n", *a);
|
||||||
|
int *ap1 = &a[1];
|
||||||
|
*ap1++ = 99;
|
||||||
|
printf("Executing *ap1++:\n");
|
||||||
|
print_array(a, ARRAY_SIZE);
|
||||||
|
printf("*ap1 after execution:\n");
|
||||||
|
printf("%d\n", *ap1);
|
||||||
|
int *ap2 = &a[2];
|
||||||
|
*(ap2)++ = 88;
|
||||||
|
printf("Executing *(ap2)++:\n");
|
||||||
|
print_array(a, ARRAY_SIZE);
|
||||||
|
printf("*ap2 after execution:\n");
|
||||||
|
printf("%d\n", *ap2);
|
||||||
|
int *ap3 = &a[3];
|
||||||
|
*++ap3 = 77;
|
||||||
|
printf("Executing *++ap3:\n");
|
||||||
|
print_array(a, ARRAY_SIZE);
|
||||||
|
printf("*ap3 after execution:\n");
|
||||||
|
printf("%d\n", *ap3);
|
||||||
|
}
|
18
c_modern_approach/Pointers/pointers_operands_usage.c
Normal file
18
c_modern_approach/Pointers/pointers_operands_usage.c
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
int main() {
|
||||||
|
int a, *ap;
|
||||||
|
a = 123;
|
||||||
|
ap = &a;
|
||||||
|
int b = 10;
|
||||||
|
printf("a:\t%d\n", a);
|
||||||
|
printf("&a:\t%p\n", &a);
|
||||||
|
printf("ap:\t%p\n", ap);
|
||||||
|
printf("*ap:\t%d\n", *ap);
|
||||||
|
printf("&ap:\t%p\n", &ap);
|
||||||
|
printf("*&ap:\t%p\n", *&ap);
|
||||||
|
printf("**&ap:\t%d\n", **&ap);
|
||||||
|
printf("------\n");
|
||||||
|
printf("b:\t%d\n", b);
|
||||||
|
printf("&b:\t%p\n", &b);
|
||||||
|
printf("*&b:\t%d\n", *&b);
|
||||||
|
}
|
16
c_modern_approach/Pointers/reverse.c
Normal file
16
c_modern_approach/Pointers/reverse.c
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#define N 10
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int a[N], *p;
|
||||||
|
printf("Enter %d numbers: ", N);
|
||||||
|
for (p = a; p < a + N; p++) {
|
||||||
|
scanf("%d", p);
|
||||||
|
}
|
||||||
|
printf("In reverse order:");
|
||||||
|
for (p = a + N - 1; p >= a; p--) {
|
||||||
|
printf(" %d", *p);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue