Алгоритм програмчлал Багш: М.Цэцэнцэнгэл
Алгоритм програмчлалБагш: М.Цэцэнцэнгэл
Си хэлийн заагч
Си хэлийн заагч
Заагч төрөл
Заагч (pointer) гэдэг нь компьютерын санах ойн нэгэн утгын заадаг объектыг хэлнэ.
Заагч хувьсагч нь санах ойн хаягийг хадгалдаг байна.
Си хэлийн заагч
Заагчийн зарлагаа нь энгийн хувьсагчийн зарлагаатай адил боловч хувьчсагчийн урд * тэмдэгтэй байдгаараа ялгаатай.
int a; // engiin huvisagchint *a; // zaagch huvisagch
Заагч
Заагч төрөл нь зөвхөн “unsigned int” утгыг л хадгалдаг. Тэрнээс биш урд нь тавьж байгаа өгөгдлийн төрөл өөр зориулалттай.
float *a; // adilint *b; // adil
Хаяг авдаг Си хэлийн оператор
& оператор нь Си хэлэнд тухайн хувьсагчийн санах ойд байрлаж байгаа хаягийг авдаг.Бид өмнө нь scanf() функцэд ашиглаж байсан.
scanf(“%d”, &a);
Заагчид утга олгоё!
int b;int *a;b = 17;a = &b; // b huvisagchiin hayg a zaagchid
// hadgalagdlaa
Энэ үед оюутнууд
Санах ойд юу болж байна?
Заагч дахь утгыг авахдаа
int b;int *a;b = 17;a = &b;printf(“%u”, a); // 1462 gej hevleneprintf(“%d”, *a); // 17 gej hevlene
Энэ үед оюутнууд
Цуваа ба заагч
int a[] = {10,20,30,40,50};int *p;p = &a;printf(“%d\n”, *p); // 10printf(“%d\n”, *(p+1)); // 20printf(“%d\n”, *(p+2)); // 30
Энэ үед санах ойд
Хаяг 2686712 2686716 2686720 2686724
Утга 10 20 30 40
a
printf(“%u”, a); // 2686712printf(“%u”, p); // 2686712
Цувааны хувьсагч нь цуваа эхэлж байгаа санах ойн хаягийг хадгалж байдаг.
p p+1 p+2 p+3
Бодлого
Хоёр хувьсагчийн утгыг хооронд нь соль.a = 5;b = 7; байсныг a = 7;b = 5; болго.
Солих бодлогын шийдэл 1
int a = 5;int b = 7;a = a + b; // b = 7, a = 5 + 7 = 12b = a - b; // a = 12, b = 12 - 7 = 5a = a - b; // b = 5, a = 12 - 5 = 7
Солих бодлогын шийдэл 2
int a = 5;int b = 7;int tmp;tmp = a;a = b;b = tmp;
Солих үйлдлийг функц болгоё
void swap(int a, int b) {int tmp;tmp = a;a = b;b = tmp;
}
swap функцээ дуудъя
void main(){
int a = 5;int b = 7;swap(a,b);printf(“a=%d b=%d”, a, b);
}
Асуудлыг шийдье
void swap(int *a, int *b){
int tmp;tmp = *a;*a = *b;*b = tmp;
}
swap функцээ дуудъя
void main(){
int a = 5;int b = 7;swap(&a, &b);printf(“a=%d b=%d”, a, b);
}