# Pointer and array

## 1.How is memory laid out for a program?

* Memory is divided into **blocks** of a certain size (32-bits or 64-bits depending on the OS)
* Each block has a specified address
  * This means every location in memory can be accessed by using its address
* 變數是參照某位置, 值是儲存該位置的值
* pointer是指向某位置, 值是儲存該位置

```
int radius = 25;
int *rasdiudPtr = &radius;
int *otherRsdiudPtr;
otherRsdiudPtr = rasdiudPtr;
int r = *rasdiudPtr;

printf("%u\n", &radius); //123FF
printf("d\n", *&radius); //25
printf("%d\n", *rasdiudPtr); //25
printf("%u\n", rasdiudPtr); //11DA
printf("%u\n", &radiusPtr); //123FF
printf("%u\n", &otherRsdiudPtr); //AB24
```

## 2.Why pointer need a type?

* How mush space does stuff occupy
  * Integer: 4 bytes
  * Float: 4 bytes
  * Char: 1 bytes

## 3.Arrays in C are actually pointers

* **Array variables are simply pointers**
  * int \*: arr is a pointer to an integer and it points to the address location of the very first element in the integer array

```
int arr[4] = {1, 2, 3, 4};
int *intptr = arr;
intptr++;
```

## 4.Problem 1

```
int length = 10;
int breadth = 5;
int *length_ptr = &length;
int *breadth_ptr = &breadth;

printf("%d\n", *length_ptr); // 10
printf("%d\n", *breadth_ptr); //5
```

## 5.Problem 2

```
int length = 10;
int breadth = 5;
int *length_ptr = &length;
int *breadth_ptr = &breadth;

printf("%u\n", length_ptr); // OX7F
printf("%u\n", breadth_ptr); //OX77
```

## 6.Problem 3

```
int length = 10;
int breadth = 5;
int *length_ptr = &length;
int *breadth_ptr = &breadth;
int *test = length_ptr;
*test = 25;

printf("%d\n", length); //25
printf("%d\n", breadth); //5
```

## 7.Problem 4

```
int length = 10;
int breadth = 5;
int *length_ptr = &length;
int *breadth_ptr = &breadth;
int *test = length_ptr;
*test = 25;

printf("%d\n", length); //25
printf("%d\n", breadth); //5

test = breadth_ptr;
*test = 20;

printf("%d\n", length); //25
printf("%d\n", breadth); //20
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://jenhsuan.gitbook.io/algorithm/algorithms-in-a-nutshell/pointer-and-array.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
