Pointers in C -...

Preview:

Citation preview

1

Pointers-2

Багш: Д.Саулегүл

Лекц-6

Санах ой гэж юу бэ

RAM?

ROM?

2

Санах ой

Санах ой нь персонал компьютерийн микропроцессор өгөгдөлд богино хугацаанд хүрэх, командыг түргэн гүйцэтгэх үүрэг бүхий микросхем юм. Энэ нь персонал компьютерийн хурд, хүчин чадлыг тодорхойлох бас нэгэн чухал үзүүлэлт болдог.

3

Компьютерийг асаахад үйлдлийн системийг санах ойд ачаалдаг. Санах ойг RAM гэж нэрлэдэг.

4

RAM (Random Access Memory)

RAM нь микропроцессор шиг силикон дээр суурилсан электрон гүйдэл агуулдаг бөгөөд эх хавтанд суурилуулж өгдөг.Персонал компьютер ажиллаж байх үед мэдээллийг хаана хадгалах эсвэл хааш нь шилжүүлэх зэргийг RAM буюу шуурхай санах ой зохицуулж байдаг.

5

Заагч гэж юу бэ?

6

Заагч

Заагч гэдэг нь хувьсагчийн санах ойн хаягийг авдаг. ӨХ санах ойн хаягаар дамжуулан уг хувьсагчид хандаж байгаа хэрэг юм. Заагч нь санах ойн hear мужид оршино. Заагчийг си хэлэнд зарлахдаа хувьсагчийн өмнө од тавьдаг.

7

Заагч

Заагчийг өх санах ойг програмын явцад үүсгэж мөн устгаж болно. Харин статик хувьсагчийн хувьд энэ нь боломжгүй юм. Хувьсагчийн заагч нь хувьсагчийг, хаягын заагч нь санах ойн хаягийг заана.

8

Харин заагч нь RAM-ний аль хаягыг зааж чадах ба ихэнхдээ аль нэг хувьсагчийн ram дээр байрлах хаягыг заалгахад ашигладаг. RAM хаяг гэдэг нь 0xffffffff гэсэн порматтай 16 тоо байдаг. Ө.х заагч нь өөрөө хувьсагчийн нэг хэлбэр юм.

printf(“%p”, &a); // а хувьсагчийн хаягыг хэвлэнэ. 16 тоотруу / 0xffffffff /

9

10

int i = 5;

int *ptr; /* declare a pointer variable */

ptr = &i; /* store address-of i to ptr */

printf(“*ptr = %d\n”, *ptr); /* refer to referee of ptr */

11

Энэ юу гэж байгаа бэ?

scanf(“%d”, &i);

12

What actually ptr is?

int i = 5;

int *ptr;

ptr = &i;

printf(“i = %d\n”, i);

printf(“*ptr = %d\n”, *ptr);

printf(“ptr = %p\n”, ptr);

5i

address of iptr

Output:

i = 5

*ptr = 5

ptr = effff5e0

value of ptr =

address of i

in memory

13

Twin Operators

&: Address-of operator

Get the address of an entity e.g. ptr = &j;

Addr Content Addr Content Addr Content Addr Content

1000 i: 40 1001 j: 33 1002 k: 58 1003 m: 74

1004 ptr: 1001 1005 1006 1007

14

Twin Operators

*: De-reference operator

Refer to the content of the referee e.g. *ptr = 99;

Addr Content Addr Content Addr Content Addr Content

1000 i: 40 1001 j: 99 1002 k: 58 1003 m: 74

1004 ptr: 1001 1005 1006 1007

15

Example

void f(int j)

{

j = 5;

}

void g()

{

int i = 3;

f(i);

}

void f(int *ptr)

{

*ptr = 5;

}

void g()

{

int i = 3;

f(&i);

} i = ?i = ?i = 3 i = 5

16

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

17

int i = 5, j = 10;

int *ptr; /* declare a pointer-to-integer variable */

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

ptr int * integer pointer variable

An Illustration

18

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr; /* declare a pointer-to-pointer-to-integer variable */

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

ptr int * integer pointer variable

pptr int ** integer pointer pointer variable

Double

Indirection

19

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i; /* store address-of i to ptr */

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable

*ptr int de-reference of ptr 5

20

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr; /* store address-of ptr to pptr */

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

*pptr int * de-reference of pptr value of ptr

(address of i)

21

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 3

j int integer variable 10

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

*ptr int de-reference of ptr 3

22

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 7

j int integer variable 10

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

**pptr int de-reference of de-reference of pptr

7

23

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 7

j int integer variable 10

ptr int * integer pointer variable address of j

pptr int ** integer pointer pointer variable address of ptr

*ptr int de-reference of ptr 10

24

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 7

j int integer variable 9

ptr int * integer pointer variable address of j

pptr int ** integer pointer pointer variable address of ptr

**pptr int de-reference of de-reference of pptr

9

25

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 7

j int integer variable 9

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

*pptr int * de-reference of pptr value of ptr

(address of i)

26

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable -2

j int integer variable 9

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

*ptr int de-reference of ptr -2

27

а утгыг хэвлэж байна

а утгыг хэвлэж байна

а хаяг хэвлэж байна

а хаяг хэвлэж байна

р хаяг хэвлэж байна

28

#include<stdio.h>

int main() {

int *ptr_A; /* A typed pointer */

void *ptr_B; /* A untyped pointer */

return 0; }

29

#include<stdio.h>

int main() {

int x;

int *ptr_p;

x = 5;

ptr_p = &x;

return 0; }

30

#include<stdio.h>

int main() {

int x,y;

int *ptr_p;

x = 5;

ptr_p = &x;

y = *ptr_p;

printf("%d\n", y);

return 0; } 31

#include<stdio.h>

int main() {

int x;

int *ptr_p;

x = 5;

ptr_p = &x;

*ptr_p = 10;

("%d\n", x);

return 0; } 32

Recommended