Top Banner
Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường ại học Khoa học Tự nhiên 1 ThS. ặng Bình Phương [email protected] KỸ THUẬT LẬP TRÌNH DỮ LIỆU KIỂU CON TRỎ (CƠ BẢN)
40

Con Tro Co Ban

Nov 14, 2015

Download

Documents

anvinhnd

Con Tro Co Ban
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • B mn Cng ngh phn mm Khoa Cng ngh thng tin Trng i hc Khoa hc T nhin

    1

    ThS. ng Bnh Phng [email protected]

    K THUT LP TRNH

    D LIU KIU CON TR (C BN)

  • VC

    &

    BB

    2 2

    Ni dung

    D liu kiu con tr (c bn)

    Khi nim v cch s dng 1

    Cc cch truyn i s cho hm 2

    Con tr v mng mt chiu 3

    Con tr v cu trc 4

  • VC

    &

    BB

    3 3

    Kin trc my tnh

    B nh my tnh B nh RAM cha rt nhiu nh, mi nh

    c kch thc 1 byte. RAM dng cha mt phn h iu hnh,

    cc lnh chng trnh, cc d liu Mi nh c a ch duy nht v a ch ny

    c nh s t 0 tr i. V d

    RAM 512MB c nh a ch t 0 n 229 1 RAM 2GB c nh a ch t 0 n 231 1

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    4 4

    Quy trnh x l ca trnh bin dch Dnh ring mt vng nh vi a ch duy nht

    lu bin . Lin kt a ch nh vi tn bin. Khi gi tn bin, n s truy xut t ng n

    nh lin kt vi tn bin. V d: int a = 0x1234; // Gi s a ch 0x0B

    Khai bo bin trong C

    D liu kiu con tr (c bn)

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    a

    34 12 00 00

  • VC

    &

    BB

    5 5

    Khi nim con tr

    Khi nim a ch ca bin l mt con s. Ta c th to bin khc lu a ch ca

    bin ny Con tr.

    D liu kiu con tr (c bn)

    0A

    34

    0B

    12

    0C

    00

    0D

    00

    0E 0F 10 11 12 13 14 15 16 17

    a pa

    0B 00 00 00

  • VC

    &

    BB

    6 6

    Khai bo con tr

    Khai bo Ging nh mi bin khc, bin con tr mun

    s dng cng cn phi c khai bo

    V d

    ch1 v ch2 l bin con tr, tr ti vng nh kiu char (1 byte). p1 l bin con tr, tr ti vng nh kiu int (4

    bytes) cn p2 l bin kiu int bnh thng. D liu kiu con tr (c bn)

    *;

    char *ch1, *ch2;

    int *p1, p2;

  • VC

    &

    BB

    7 7

    Khai bo con tr

    S dng t kha typedef

    V d

    Lu khi khai bo kiu d liu mi Gim bi ri khi mi tip xc vi con tr. Nhng d nhm ln vi bin thng.

    D liu kiu con tr (c bn)

    typedef *; ;

    typedef int *pint;

    int *p1;

    pint p2, p3;

  • VC

    &

    BB

    8 8

    Con tr NULL

    Khi nim Con tr NULL l con tr khng tr v u c. Khc vi con tr cha c khi to.

    D liu kiu con tr (c bn)

    NULL

    int n;

    int *p1 = &n;

    int *p2; // unreferenced local variable

    int *p3 = NULL;

  • VC

    &

    BB

    9 9

    Khi to kiu con tr

    Khi to Khi mi khai bo, bin con tr c t a

    ch no (khng bit trc). cha gi tr khng xc nh tr n vng nh khng bit trc. t a ch ca bin vo con tr (ton t &)

    V d

    D liu kiu con tr (c bn)

    = &;

    int a, b;

    int *pa = &a, *pb;

    pb = &b;

  • VC

    &

    BB

    10 10

    S dng con tr

    Truy xut n nh m con tr tr n Con tr cha mt s nguyn ch a ch. Vng nh m n tr n, s dng ton t *.

    V d

    D liu kiu con tr (c bn)

    int a = 5, *pa = &a; printf(%d\n, pa); // Gi tr bin pa printf(%d\n, *pa); // Gi tr vng nh pa tr n printf(%d\n, &pa); // a ch bin pa

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    a pa

    0B 00 00 00 05 00 00 00

  • VC

    &

    BB

    11 11

    Kch thc ca con tr

    Kch thc ca con tr

    Con tr ch lu a ch nn kch thc ca mi con tr l nh nhau: Mi trng MD-DOS (16 bit): 2 bytes (64KB) Mi trng Windows (32 bit): 4 bytes (4GB)

    D liu kiu con tr (c bn)

    char *p1;

    int *p2;

    float *p3;

    double *p4;

  • VC

    &

    BB

    12 12

    Cc cch truyn i s

    Truyn gi tr (tham tr)

    D liu kiu con tr (c bn)

    #include

    void hoanvi(int x, int y);

    void main()

    {

    int a = 3; b = 6;

    hoanvi(a, b);

    printf(a = %d, b = %d, a, b); }

    void hoanvi(int x, int y)

    {

    int t = x; x = y; y = t;

    }

  • VC

    &

    BB

    13 13

    int t = x; x = y; y = t;

    Truyn gi tr (tham tr)

    D liu kiu con tr (c bn)

    05 00 00 00 06 00 00 00

    int a = 3

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    int b = 6

    int x int y hoanvi

    18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25

    int x int y

    05 00 00 00 06 00 00 00

  • VC

    &

    BB

    14 14

    Cc cch truyn i s

    Truyn a ch (con tr)

    D liu kiu con tr (c bn)

    #include

    void hoanvi(int *x, int *y);

    void main()

    {

    int a = 3; b = 6;

    hoanvi(&a, &b);

    printf(a = %d, b = %d, a, b); }

    void hoanvi(int *x, int *y)

    {

    int t = *x; *x = *y; *y = t;

    }

  • VC

    &

    BB

    15 15

    int t = *x; *x = *y; *y = t;

    Truyn a ch (con tr)

    D liu kiu con tr (c bn)

    int a = 3

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    int b = 6

    int *x int *y hoanvi

    18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25

    int *x int *y

    0B 00 00 00 0F 00 00 00

    05 00 00 00 06 00 00 00

  • VC

    &

    BB

    16 16

    Cc cch truyn i s

    Truyn tham chiu (C++)

    D liu kiu con tr (c bn)

    #include

    void hoanvi(int &x, int &y);

    void main()

    {

    int a = 3; b = 6;

    hoanvi(a, b);

    printf(a = %d, b = %d, a, b); }

    void hoanvi(int &x, int &y)

    {

    int t = x; x = y; y = t;

    }

  • VC

    &

    BB

    17 17

    int t = x; x = y; y = t;

    Truyn tham chiu (C++)

    D liu kiu con tr (c bn)

    int a = 3

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    int b = 6

    int &x int &y hoanvi

    05 00 00 00 06 00 00 00

  • VC

    &

    BB

    18 18

    Mt s lu

    Mt s lu Con tr l khi nim quan trng v kh nht

    trong C. Mc thnh tho C c nh gi qua mc s dng con tr. Nm r quy tc sau, v d int a, *pa = &a;

    *pa v a u ch ni dung ca bin a. pa v &a u ch a ch ca bin a.

    Khng nn s dng con tr khi cha c khi to. Kt qu s khng lng trc c.

    D liu kiu con tr (c bn)

    int *pa; *pa = 1904; // !!!

  • VC

    &

    BB

    19 19

    Con tr v mng mt chiu

    Mng mt chiu

    Tn mng array l mt hng con tr khng th thay i gi tr ca hng ny. Gi tr ca array l a ch phn t u tin

    ca mng array == &array[0]

    D liu kiu con tr (c bn)

    int array[3];

    array

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

  • VC

    &

    BB

    20 20

    Con tr n mng mt chiu

    Con tr v mng mt chiu

    D liu kiu con tr (c bn)

    int array[3], *parray;

    parray = array; // Cch 1

    parray = &array[0]; // Cch 2

    array

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    18 19 1A 1B 1C 1D 1E 1F

    parray

    0B 00 00 00

  • VC

    &

    BB

    21 21

    Php cng (tng) + n + n * sizeof() C th s dng ton t gp += hoc ++

    +2

    Php ton s hc trn con tr

    D liu kiu con tr (c bn)

    p = array

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    +1

    int array[3];

  • VC

    &

    BB

    22 22

    Php tr (gim) n n * sizeof() C th s dng ton t gp = hoc

    Php ton s hc trn con tr

    D liu kiu con tr (c bn)

    p = &array[2]

    1 2

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    int array[3];

  • VC

    &

    BB

    23 23

    p2 = &array[2] p1 = array

    Php ton tnh khong cch gia 2 con tr *p1, *p2; p1 p2 cho ta khong cch (theo s phn t)

    gia hai con tr (cng kiu)

    Php ton s hc trn con tr

    D liu kiu con tr (c bn)

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    int array[3];

    p1 p2= (0B 13)/sizeof(int) = 2

    p2 p1= (13 0B)/sizeof(int) = +2

  • VC

    &

    BB

    24 24

    Cc php ton khc Php so snh: So snh a ch gia hai con

    tr (th t nh) == != > >= <

  • VC

    &

    BB

    25 25

    Truy xut n phn t th n ca mng int array[3], n = 2, *p = array; array[n] == p[n] == *(p + n)

    Con tr v mng mt chiu

    D liu kiu con tr (c bn)

    p

    0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17

    int array[3];

    + 2 ) ( *

  • VC

    &

    BB

    26 26

    Con tr v mng mt chiu

    V d nhp mng

    D liu kiu con tr (c bn)

    void main()

    {

    int a[10], n = 10, *pa;

    pa = a; // hoc pa = &a[0];

    for (int i = 0; i

  • VC

    &

    BB

    27 27

    Con tr v mng mt chiu

    V d xut mng

    D liu kiu con tr (c bn)

    void main()

    {

    int a[10], n = 10, *pa;

    pa = a; // hoc pa = &a[0]; for (int i = 0; i

  • VC

    &

    BB

    28 28

    Truyn mng 1 chiu cho hm

    Ch ! Mng mt chiu truyn cho hm l a ch ca

    phn t u tin ch khng phi ton mng.

    D liu kiu con tr (c bn)

    10 11 13 14 15 16 17 18 19 20 21 22 23 24

    int array[3];

    int a[3] int n xut

    int a[] int *a

  • VC

    &

    BB

    29 29

    i s mng truyn cho hm

    V d

    D liu kiu con tr (c bn)

    void xuat(int a[10], int n)

    {

    for (int i = 0; i

  • VC

    &

    BB

    30 30

    Lu Khng thc hin cc php ton *, /, %. Tng/gim con tr n n v c ngha l

    tng/gim gi tr ca n n*sizeof() (bytes) Khng th tng/gim bin mng (con tr

    hng). Hy gn mt con tr n a ch u ca mng v tng/gim con tr . i s mng mt chiu truyn cho hm l a

    ch phn t u tin ca mng.

    Con tr v mng mt chiu

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    31 31

    Con tr v cu trc

    Truy xut bng 2 cch

    V d

    D liu kiu con tr (c bn)

    typedef struct

    {

    int tu, mau;

    } PHANSO;

    PHANSO ps1, *ps2 = &ps1; // ps2 l con tr

    ps1.tu = 1; ps1.mau = 2;

    ps2->tu = 1; ps2->mau = 2;

    (*ps2).tu = 1; (*ps2).mau = 2;

    -> (*).

  • VC

    &

    BB

    32 32

    Bi tp

    Bi 1: Cho on chng trnh sau: float pay;

    float *ptr_pay;

    pay=2313.54;

    ptr_pay = &pay;

    Hy cho bit gi tr ca: a. pay

    b. *ptr_pay

    c. *pay

    d. &pay

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    33 33

    Bi tp

    Bi 2: Tm li

    D liu kiu con tr (c bn)

    #include

    #include

    void main()

    {

    int *x, y = 2;

    *x = y;

    *x += y++;

    printf("%d %d", *x, y);

    getch();

    }

  • VC

    &

    BB

    34 34

    Bi tp

    Bi 3: Cho on chng trnh sau: int *pint;

    float f;

    char c;

    double *pd;

    Hy chn pht biu sai c php: a. f = *pint;

    b. c = *pd;

    c. *pint = *pd;

    d. pd = f;

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    35 35

    Bi tp

    Bi 4: Ton t no dng xc nh a ch ca mt bin?

    Bi 5: Ton t no dng xc nh gi tr ca

    bin do con tr tr n? Bi 6: Php ly gi tr gin tip l g?

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    36 36

    Bi tp

    Bi 7: Cc phn t trong mng c sp xp trong b nh nh th no?

    Bi 8: Cho mng mt chiu data. Trnh by 2 cch ly a ch phn t u tin ca mng ny.

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    37 37

    Bi tp

    Bi 9: Trnh by 6 loi php ton c th thc hin trn con tr?

    1. 2. 3. 4. 5. 6.

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    38 38

    Bi tp

    Bi 10: Cho con tr p1 tr n phn t th 3 cn con tr p2 tr n phn t th 4 ca mng int th p2 p1 = ?

    Bi 11: Ging nh cu trn nhng i vi mng float?

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    39 39

    Bi tp

    Bi 12: Trnh by khai bo con tr pchar tr n kiu char.

    Bi 13: Cho bin cost kiu int. Khai bo v khi

    to con tr pcost tr n bin ny. Bi 14: Gn gi tr 100 cho bin cost s dng

    hai cch trc tip v gin tip. Trc tip: Gin tip:

    D liu kiu con tr (c bn)

  • VC

    &

    BB

    40 40

    Bi tp

    Bi 15: In gi tr ca con tr v gi tr ca bin m n tr ti.

    Bi 16: S dng con tr lm li cc bi tp v

    mng mt chiu. Nhp/Xut mng Tm phn t tha yu cu Tnh tng/m cc phn t tha yu cu Sp xp tng/gim

    D liu kiu con tr (c bn)