# Pointer
- Addr, Type, and Value
- First test program
筆記 1
```c=
#include <stdio.h>
int main(){
int x = 100;
printf("x = %d at addr = %p\n", x, &x);
return 0;
}
```
結果

## Practice 1
```c=
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int answer[4];
int guess[4];
int i, j, x, y, num_guesses;
char input[5];
srand(time(NULL));
for (i = 0; i < 4; i++) {
answer[i] = rand() % 10;
for (j = 0; j < i; j++) {
if (answer[i] == answer[j]) {
i--;
break;
}
}
}
num_guesses = 0;
do {
printf("Enter your guess (4 digits): ");
scanf("%s", input);
for (i = 0; i < 4; i++) {
guess[i] = input[i] - '0';
}
x = y = 0;
for (i = 0; i < 4; i++) {
if (guess[i] == answer[i]) {
x++;
} else {
for (j = 0; j < 4; j++) {
if (guess[i] == answer[j]) {
y++;
break;
}
}
}
}
printf("%dA%dB\n", x, y);
num_guesses++;
} while (x < 4);
printf("Congratulations! You guessed the answer in %d guesses.\n", num_guesses);
return 0;
}
```
結果

## practice 2
```c=
#include <stdio.h>
int main() {
int a[10];
printf("a: %p\n", a);
printf("&a: %p\n", &a);
printf("&a[0]: %p\n", &a[0]);
printf("&a[3]: %p\n", &a[3]);
printf("a+3: %p\n", a+3);
for (int i=0; i<10; i++) {
scanf("%d", a+i);
}
return 0;
}
```
## practice 3
```c=
#include <stdio.h>
int main() {
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *ap = a;
printf("ap[0]: %d\n", ap[0]);
for (int i=0; i<10; i++) {
printf("a[%d]: %d\n", i, a[i]);
printf("ap[%d]: %d\n", i, ap[i]);
printf("*(a+%d): %d\n", i, *(a+i));
printf("*(ap+%d): %d\n", i, *(ap+i));
}
a++;
a+=3;
printf("a+3: %p\n", a);
ap++;
ap+=3;
printf("ap+3: %p\n", ap);
printf("ap-a: %ld\n", ap-a);
return 0;
}
```
## practice 4
```c=
#include <stdio.h>
int main() {
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *ap = a;
printf("Size of a: %ld bytes\n", sizeof(a));
printf("Size of a[0]: %ld bytes\n", sizeof(a[0]));
printf("Number of elements in a: %ld\n", sizeof(a) / sizeof(a[0]));
return 0;
}
```