32
1 Pointers-2 Багш: Д.Саулегүл Лекц-6

Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

1

Pointers-2

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

Лекц-6

Page 2: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

RAM?

ROM?

2

Page 3: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

Санах ой

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

3

Page 4: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

4

Page 5: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

RAM (Random Access Memory)

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

5

Page 6: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

6

Page 7: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

Заагч

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

7

Page 8: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

Заагч

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

8

Page 9: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

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

9

Page 10: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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 */

Page 11: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

11

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

scanf(“%d”, &i);

Page 12: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 13: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 14: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 15: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 16: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 17: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 18: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 19: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 20: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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)

Page 21: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 22: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 23: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 24: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 25: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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)

Page 26: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

Page 27: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

27

Page 28: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

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

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

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

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

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

28

Page 29: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

#include<stdio.h>

int main() {

int *ptr_A; /* A typed pointer */

void *ptr_B; /* A untyped pointer */

return 0; }

29

Page 30: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

#include<stdio.h>

int main() {

int x;

int *ptr_p;

x = 5;

ptr_p = &x;

return 0; }

30

Page 31: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

#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

Page 32: Pointers in C - soyolerdem.edu.mnsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/6-CPointer.pdf · Санах ой Санах ой нь персонал компьютерийн

#include<stdio.h>

int main() {

int x;

int *ptr_p;

x = 5;

ptr_p = &x;

*ptr_p = 10;

("%d\n", x);

return 0; } 32