бир мүнөз тизилип жана C-сап ортосунда кандай айырма бар?


жооп 1:

каармандардын ар түрдүү 8-биттик байттар талданып жаткан канатташ эс аралыгы саналат. көлөмү даярдоо белгиленет жана ар бир байт бир мүнөз сакталат деп кепилдик берилет.

00000000 Бул учурда ар бир 8-биттик бинардык орундуу болсо бир тамга (0x00 HEX) 11111111 (0xFF HEX) үчүн.

Исахар Array [100]; / * 100 белгиден Array [0] тизилип аркылуу [99] * /

A C сактоо үчүн, Исахар толгон колдонуп сап. A C сап тизилип, минус 1 белгиден узундугуна 0 узак болушу мүмкүн.

жакшы пайда болушу үчүн, шөкөттөп тамга комплексин пайдаланууга жерде жарактуу белгилер билдирет байттар гана тобун камтышы керек. Көп учурда бул ASCII же UTF-8 болот. сап басма же чечмеленген болсо, бардык башка байт жарактуу эмес.

сап тизилип дарегин камтыган ат (өзгөрүлмө), бир мүнөз көрсөткүчү түрү болуп саналган (Исахар *) бар.

сап сап акыркы мүнөзү кийин NULCHAR сап аяктады ( "\ 0", 0x00 Хекс) бар.

Исахар менен [10]; Исахар * Т = с; strncpy (Т, "012345678 \ 0", 10)

A 'дароо сап "кош тырмакчага булак коду жазылган жана бүткөн мүнөзү түзүлгөн жана Саптар жана берүүнүн ага бир көрсөткүчү үчүн атайын окуу үчүн гана имаратта сакталганы менен мүнөзү толгон себеп болот. Бул Түзүүчүнүн "синтаксисин кант" жана мындай саптарды колдонууну жөнөкөйлөштүрөт. А NULCHAR бул жакшы түзүлгөн сап үчүн жазуусу тизилип тиркелет.

Исахар * с = "дароо сап"; printf ( "% с \ н), S);

белги катары C китепкана бөлүмүн ачуу сап канааттандырылган саптардын Бардык стандарттык кызматтары жана "\ 0" бар деп ойлойбуз.

кыйла жалпы колдонулган А "кирешелүү", бир эле учурда алууда бир катар аталышы катар биринчи элементтин бир көрсөткүч катары кызмат болуп саналат. жана тескерисинче.

Исахар * х = "abcdefgh"; printf ( "х 4 каармандар:% с \ н", х [3]); х 4 каармандар: D * кыстар / сап бир каарман даяр * / Исахар көч [100]; strncpy (көчөсү, "ABCDEFGHIJKLMNOP \ 0", 18); Исахар * бир = ш; Исахар * к = б + 7; printf ( "% с \ н", а); ABCDEFGHIJKLMNOP printf ( "% с \ н", б); hijklmnop

Бул ийкемдүүлүгүнө карабастан, бир Исахар тутуму жана C-сап түздөн-түз шайкеш келбейт.

Исахар менен [10]; с = "ABCDEFGHI"; / * Error * / // ката: тип коюу үчүн келбеген түрлөрү [10] "түрү" Исахар * "ABCDEFGHI" түздөн-түз сап, ал эми бир көрсөткүч эриген жатат: "Бул тизилип үчүн жаратылган бир". с Исахар Arrays берилиши мүмкүн эмес, анткени, иштебей ыйгаруу.

Arrays биринчи класстагы C түрү, чындыгында, андай эмес болуп саналат. Алар түздөн-түз көчүрүлүп алышы мүмкүн эмес, алар тутуму боюнча эч кандай иш бар, ж.б. баары С эмес, бир бүтүн нерсе катары, жеке мазмуну үчүн жүргүзүлгөн Бүтүн алуу менен ишке ашырылат.

Исахар менен [10]; Исахар * х = "ABCDEFGHI"; / * \ 0 "Бир мезгилдин акырына карата * / strncpy боюнча (с, X, 10); / * Бир катар ар бир мүнөзгө көчүрүү * /

жооп 2:

Бир тамга Array С маалымат түзүмү болуп саналат: Сиз белгилер сактай алат эс байттар бир катар. Сиз бул клеткалардын ар сактоону эч бир тамга (башкача айтканда, 8-биттик байт, 0 255) пайдалана аласыз.

C-стилинин бир сап (сиздин суроого "с-сап:" котормо менен мен сыяктуу) белгилердин "сап" нөл байт жок каармандардын бир катар C тилинде (балл) менен аныкталат жол берүүгө болот 0). Бул сап муктаж узундугу өзүнчө сакталат эмес, ошондуктан бир нөл байт кийин каармандардын өздөрү менен сунушталган. маалымат байттар бул санынын (сап узундугу көпчүлүк учурда 65535 Pascal-ушунчалык) тарабынан 16-бит коюлбаган Бүтүн артынан турган Pascal стилинде жип менен салыштырып көрчү.

тамга Array Ошентип, C-стили маалыматтар менен тааныштыруу сап бир маалымат түзүмү болуп эсептелет. Алар ар түрдүү жаныбарлар бар.

Бир тамга шөкөттөп, C-стили сап же башка бар (мис., Ал анык белгилер жок, нөл мүнөзү боюнча же бардык пайдалуу маалыматтарды камтыйт ылайык). бирок силер дагы C-стили сап (ал жок дегенде бир нөл белги камтылган көп эле) чечмелесе, ошондой болуп мүмкүн болот. Бир тамга C-стилиндеги сап мүнөзү тизилип, же бир катар башка жерге сакталган болот (Z. Б. окуу үчүн гана эс алган үлүшү ушундай +, "Сактоо" Ошондуктан эч кандай башка баалуулуктар мүмкүн).