40
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)

Con Tro Co Ban

Embed Size (px)

DESCRIPTION

Con Tro Co Ban

Citation preview

  • 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)