Más contenido relacionado
La actualidad más candente (20)
Más de Khuder Altangerel (18)
u.cs101 "Алгоритм ба програмчлал" Лекц №6
- 2. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
212/16/2015Vanderbilt university
- 3. Утга нь санах ойн хаяг байна
Энгийн хувьсагчид ямар нэг утга хадгалдаг
(шууд хаяглалт)
Заагч нь ямар нэг утга агуулж байгаа
хувьсагчийн хаягийг агуулна (шууд бус
хаяглалт)
312/16/2015Vanderbilt university
- 4. Заагч хувьсагчид * - ыг хэрэглэнэ
int *myPtr;
int төрлийн заагчийг тодорхойлно (int * төрлийн заагч)
Олон заагч зарлах бол хувьсагч бүрийн өмнө * -ыг бичнэ
int *myPtr1, *myPtr2;
Ямар ч төрлийн заагч зарлаж болно
Заагчийн анхны утгаар 0, NULL эсвэл ямар нэг хаяг өгөх
◦ 0 эсвэл NULL – юуг ч заахгүй
◦ 0 нь заагчид олгож болох цорын ганц бүхэл утга юм
◦ Заагчид анхны утгыг нь 0 гэж олгох нь NULL -ыг олгохтой
ижил боловч NULL –ыг ихэвчлэн хэрэглэнэ
◦ NULL -ыг <stddef.h>, <stdio.h> гэх мэт хэд хэдэн толгой
файлд тодорхойлсон байдаг
412/16/2015Vanderbilt university
- 5. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
512/16/2015Vanderbilt university
- 6. & (хаяг авах үйлдэл)
◦ Операндынхаа хаягийг буцаана
int y = 5;
int *yPtr;
yPtr = &y; /* yPtr заагч y – гийн хаягийг авна */
/* yPtr заагч y-г заана*/
612/16/2015Vanderbilt university
- 7. * (шууд бус хаяглалт/хаяглах үйлдэл)
◦ Операндынхаа зааж байгаа зүйлийн өөр
нэр/зохиомол нэрийг буцаана
◦ *yptr нь y-ийг буцаана (yptr нь y-г зааж байгаа
учир)
◦ *-ыг утга олгоход хэрэглэж болно
Объектийн өөр нэрийг буцаана
*yptr = 7; /* changes y to 7 */
Хаяглалтанд хэрэглэж байгаа заагч нь (*-ын
операнд) lvalue байх ѐстой (тогтмол байж болохгүй).
* ба & нь эсрэг үйлдлүүд юм
Бие биенийгээ устгана
712/16/2015Vanderbilt university
- 8. Хэрэв aPtr нь a-г зааж байгаа
бол &a болон aPtr нь ижил
утга юм
a болон *aPtr нь ижил
&*aPtr болон *&aPtr нь ижил
утгатай
812/16/2015Vanderbilt university
- 11. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
1112/16/2015Vanderbilt university
- 12. Заагч аргумент ашиглан хаягаар дуудах
◦ Аргументийн хаягийг & оператор ашиглан дамжуулна
◦ Санах ой дахь бодит байрлал дээр өөрчлөлт хийх
боломж олгоно
◦ Хүснэгтийг дамжуулахад & үйлдлийг ашиглахгүй, учир
нь хүснэгтийн нэр өөрөө заагч байдаг
* оператор
◦ Функцийн дотор хувьсагчийн өөр нэр ашиглахад
хэрэглэгдэнэ
void timestwo( int *number )
{
*number = 2 * ( *number );
}
◦ *number нь дамжуулагдсан хувьсагчийн өөр нэр
байдлаар ашиглагдана
1212/16/2015Vanderbilt university
- 14. 14
Заагч аргумент авах функцийн загвар
cubeByReference функц руу
заагч хувьсагчийн утга байж
болох хаяг дамжуулсан
Энэ програмд *nPtr нь number – тэй
адил тул энэ үйлдэл нь number
хувьсагчийн утгыг өөрчилнө
12/16/2015Vanderbilt university
- 17. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
1712/16/2015Vanderbilt university
- 18. const тодорхойлогч
◦ Хувьсагчийн утга өөрчлөгдөхгүй
◦ Хэрэв функц ямар нэг хувьсагчаа өөрчлөх хэрэггүй бол
const тодорхойлогчийг хэрэглэнэ
◦ const хувьсагчийг өөрчлөх гэж оролдвол алдаа гарна
const заагчид
◦ Санах ойн тогтмол байрлал руу заана
◦ Тодорхойлох үедээ анхны утгыг нь олгох ѐстой
◦ const int *myPtr = &x;
const int төрлийн энгийн заагч
◦ int *const myPtr = &x;
int *const төрөл нь int төрлийн тогтмол заагч юм
x нь өөрчлөгдөж болох боловч myPtr өөрчлөгдөхгүй
◦ const int *const Ptr = &x;
const int төрлийн const заагч
1812/16/2015Vanderbilt university
- 21. 21
sPtr заагчийг өөрчилж болохгүй боловч зааж
байгаа өгөгдөл *sPtr-ийг өөрчилж болно
12/16/2015Vanderbilt university
- 23. 23
xPtr заагч өөрчлөгдөнө харин зааж байгаа
өгөгдөл *xPtr нь өөрчлөгдөхгүй
Хөрвүүлэлтийн алдаа!
*xPtr нь const тодорхойлогчтой
байхад утгыг нь өөрчлөх гэвэл
алдаа гарна
12/16/2015Vanderbilt university
- 25. 25
Заагч sPtr болон өгөгдөл *sPtr
хоѐулаа тогтмол
Хөрвүүлэлтийн алдаа!
12/16/2015Vanderbilt university
- 26. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
2612/16/2015Vanderbilt university
- 27. Заагч ашиглан бөмбөлгөн эрэмбэлэлтийг
хэрэгжүүлэх
◦ Хоѐр элементийн байрыг солих
◦ swap функц хүснэгтийн элементүүдийн хаягийг
хүлээж авна (& - г хэрэглэн)
◦ Заагч болон * операторыг хэрэглэн swap функц
хүснэгтийн элементүүдийг солино
Псевдокод
Хүснэгтэд анхны утга олгох
өгөгдлийг анхны хэлбэрээр нь хэвлэх
bubblesort функцийг дуудах
эрэмбэлэгдсэн хүснэгтийг хэвлэх
bubblesort функцийг тодорхойлох
2712/16/2015Vanderbilt university
- 30. 30
swap функц нь хоѐр заагчийн зааж буй
int төрлийн утгуудын байрыг солино
12/16/2015Vanderbilt university
- 31. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
3112/16/2015Vanderbilt university
- 32. sizeof
◦ Операндын хэмжээг байтаар буцаана
◦ Хүснэгтийн хувьд: нэг элементийн хэмжээ х
элементийн тоо
◦ Хэрэв sizeof(int) нь 4 байт бол
int myArray[ 10 ];
printf( "%d", sizeof( myArray ) );
40 гэж хэвлэнэ
sizeof-ыг доорх зүйлд ашиглаж болно
◦ Хувьсагчийн нэр
◦ Төрлийн нэр
◦ Тогтмолын нэр
3212/16/2015Vanderbilt university
- 33. 33
float нь санах ойд 4 байт эзэлдэг бол 20
ширхэг float нь 80 байт болно
12/16/2015Vanderbilt university
- 36. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
3612/16/2015Vanderbilt university
- 37. Заагч дээр арифметик үйлдэл хийж болно
◦ Заагчийг нэмэгдүүлэх/хорогдуулах (++ эсвэл --)
◦ Заагч дээр бүхэл тоо нэмэх (+ эсвэл +=, - эсвэл
-=)
◦ Заагчуудыг бие биенээс нь хасч болно
◦ Эдгээр үйлдлүүдийг хүснэгт дээр хийх үед л
утгатай байна
3712/16/2015Vanderbilt university
- 38. Бүхэл тоон төрөл нь 4 байт байдаг машин
дээрх 5 элементтэй хүснэгт
◦ vPtr эхний элемент v[0] рүү заана
3000 гэсэн байрлал руу (vPtr=3000)
◦ vPtr+=2; vPtr-ийг 3008 утгатай болгоно
vPtr нь v[2] руу заах (2-оор нэмэгдсэний дараа) ба, машин
4 байтын int төрөлтэй тул зааж буй хаяг нь 3008 болно.
38v хүснэгт ба түүн рүү заах vPtr заагч 12/16/2015Vanderbilt university
- 40. Заагчийг хасах
◦ Нэг заагчаас нөгөөг хүртлэх элементийн тоог
буцаана. Хэрэв
vPtr2 = v[2];
vPtr0 = v[0];
◦ vPtr2 – vPtr0 нь 2 болно
Заагчийг харьцуулах
◦ Аль заагч нь илүү их дугаартай хүснэгтийн
элемент зааж байгааг олох
◦ Заагчийн утга 0-тэй тэнцүү эсэхийг шалгах
4012/16/2015Vanderbilt university
- 41. Ижил төрлийн заагчдын хооронд утга
олгох үйлдэл хэрэглэж болно
◦ Хэрэв төрөл нь ялгаатай бол төрөл хувиргах
үйлдэл хэрэглэнэ
◦ Онцгой тохиолдол: void төрлийн заагч (void *
төрөл)
Ерөнхий заагч, ямар ч төрлийг зааж чадна
void заагч руу шилжүүлэхэд төрөл хувиргалт
хэрэггүй
void төрлийн заагч дээр шууд бус хаяглалтыг хийж
болохгүй
4112/16/2015Vanderbilt university
- 42. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
4212/16/2015Vanderbilt university
- 43. Заагч ба хүснэгт нь нягт холбоотой
◦ Хүснэгтийн нэр нь тогтмол заагч юм
◦ Заагчаар хүснэгтийн индексийн үйлдлийг хийж
болно
b[5] хүснэгт ба bPtr заагч зарлая
◦ Тэдгээрийг ижил болгохын тулд дараах үйлдлийг
хийнэ
bPtr = b;
Хүснэгтийн нэр (b) нь b[5] хүснэгтийн эхний
элементийн хаяг юм
bPtr = &b[0];
bPtr заагчид b хүснэгтийн эхний элементийн хаягийг
олгоно
4312/16/2015Vanderbilt university
- 44. b[3] элемент
◦ *(bPtr+3) гэж хандаж болно
Шилжилтийн утга n-ийн хувьд заагч/шилжилтийн
тэмдэглэгээ гэж нэрлэгддэг
◦ bPtr[3] гэж хандаж болно
Заагч/индексийн тэмдэглэгээ гэж нэрлэгддэг
bPtr[3] нь b[3] –тай адил
◦ Хүснэгт дээрээ заагчийн арифметикийг хэрэглэн
*(b+3) гэж хандаж болно
4412/16/2015Vanderbilt university
- 50. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
5012/16/2015Vanderbilt university
- 51. Хүснэгт нь заагчуудыг агуулж болно
Жишээ: Тэмдэгт мөр төрлийн хүснэгт
◦ char *suit[ 4 ] = { "Hearts", "Diamonds”, "Clubs", "Spades" };
◦ Тэмдэгт мөр нь эхний үсгийнхээ заагч юм
◦ char * - suit-ийн элемент бүр нь char төрлийн заагч юм
◦ Тэмдэгт мөрүүд нь suit хүснэгтэд хадгалагдахгүй ба тэнд
тэдний зөвхөн заагчдыг хадгална
◦ suit хүснэгт нь тогтмол хэмжээтэй ба харин тэмдэгт
мөрүүд нь ямар ч хэмжээтэй байж болно
5112/16/2015Vanderbilt university
- 53. Заагч хувьсагчийг зарлах ба анхны утга олгох
Заагч дээрх үйлдлүүд
Аргументыг функц руу хаягаар дамжуулах
const тодорхойлогчийг заагч дээр ашиглах
Хаягаар дуудах арга хэрэглэсэн бөмбөлгөн
эрэмбэлэлт
sizeof оператор
Заагчтай илэрхийлэл ба заагчийн арифметик
Заагч ба хүснэгт
Заагч төрлийн хүснэгт
Функцийн заагч
5312/16/2015Vanderbilt university
- 54. Функцийн заагч
◦ Функцийн хаягийг заана
◦ Хүснэгтийн нэр эхний элементийнхээ хаяг
байдагтай адил
◦ Функцийн нэр нь функцийг тодорхойлсон кодын
эхлэлийн хаяг байна
Функцийн заагч дээр дараах үйлдлүүдийг
хийж болно
◦ Функц руу дамжуулах
◦ Хүснэгтэнд хадгалах
◦ Өөр функцийн заагчид олгох
5412/16/2015Vanderbilt university
- 55. Жишээ: bubblesort
◦ bubble функц аргументаар функцийн заагч авна
bubble тэр туслах функцийг дуудна
энэ нь өсөх эсвэл буурахаар эрэмбэлэхийг тодорхойлно
◦ bubble функцийн аргумент болох функцийн заагч:
int ( *compare )( int a, int b );
нь bubble-д хоѐр бүхэл тоон аргументтай, бүхэл тоо
буцаадаг функц орж ирэхийг заана
◦ Хэрэв хаалтуудыг орхивол:
int *compare( int a, int b );
хоѐр int аргументтай, int-ийн заагч буцаадаг функц гэж
тодорхойлогдоно
5512/16/2015Vanderbilt university
- 59. 59
bubble функц руу ascending
функцийг дамжуулахад
програмын энэ хэсэгт ирнэ
bubble функц руу descending
функцийг дамжуулахад програмын
энэ хэсэгт ирнэ
12/16/2015Vanderbilt university
- 61. Заагч: өгөгдлийн төрөл * заагч хувьсагчийн
нэр (%p, арван зургаатын бүхэл тоо)
Утгаар дуудах (өөрчлөхгүй) ба хаягаар
дуудах (өөрчилнө)
const тодорхойлогч нь хувьсагчийг
өөрчлөхгүй байхыг заана (дөрвөн хувилбар)
sizeof нь хэмжээг байтаар тодорхойлно
Заагчийн хүснэгт
Функцийн заагч: функцийн нэр нь хаяг
байдаг
6112/16/2015Vanderbilt university