Upload
others
View
9
Download
0
Embed Size (px)
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