ПредишенСледващото

Показалки и символни низове

Низ константа, записано като

е масив от знаци. Вътрешно представяне на масива завършва с нулев знак '\ 0'. чрез които програмата може да намерите в края на линията. Броят на клетките на паметта на един повече от броя на знаците, поставени между двойни кавички.

В повечето случаи, константите на низ се използват като аргументи на функции, като например, например, в

Когато такъв низ герой се появява в програмата, достъпът до него е чрез указател характер; т.е. ФОРМАТ получава указател към началото на поредица от знаци. По-конкретно, достъп до низ постоянно чрез указател към първия елемент.

String константи не се нуждаят само като аргументи на функции. Ако, например, pmessage променлива декларирана като

pmessage = "сега е времето";

сложите в него указател към характер масива, низът не се копира, копира само указател към нея. Дейностите, които ще работят с линията като не са предвидени единица в С.

Има една важна разлика между следните определения:

въглен amessage [] = "сега е времето"; / * Array * /

Чар * pmessage = "сега е времето"; / * Index * /

amessage - масив с размери, така че той просто се вписва посочената последователност от символи и '\ 0'. Отделните знаци в масива могат да се променят, но amessage винаги сочи към едно и също място на паметта. За разлика pmessage указател, инициализира с указване на последователност постоянна. стойността на индекса може да се промени, и то последните ще се насочи към нещо друго. Също така, ако се опитате да променя съдържанието на константите, резултатът е неопределен.

Указатели и низове в езика С

Допълнителни аспекти, свързани с указатели и масиви, илюстрират няколко модифицирани версии на две полезни програми, които взехме от стандартната библиотека. Първият от тях, strcpy функция (S, T). т копия низ в низ и. Бих искал да напише чат S = т. но копия на оператора показалеца, не героите. За да копирате героите, ние трябва да се повтаря. Първи пример strcpy, като се използва масив, има следния вид:

/ * Strcpy: копие т и в един ред;

вариант с множество * /

невалидни strcpy (овъгляване и [], знак т [])

а ((S [Ь] = т [Ь])! = '\ 0')

За сравнение версия на strcpy с указатели:

/ * Strcpy: копие т и в един ред;

невалидни strcpy (знак * S, знак * т)

Тъй като функцията само копия на предадените стойности на аргументите, strcpy могат да използват свободно на параметрите S и Т двете местните променливи. Те са за работа правилно указатели, които се движат всеки път към следващия знак във всяка една от масиви за толкова дълго, колкото копирани низ тон не е '\ 0'.

На практика strcpy не пиша. Един опитен програмист биха предпочели по-кратък запис:

/ * Strcpy: копие т и в един ред;

Вариант 2 показалка * /

невалидни strcpy (знак * S, знак * т)

Нарастването на S и Т се извършва в контролната част от цикъла. Стойността на * т ++ е знака, който показва променлива т преди стойността му се увеличава; Postfix ++ не променя показалеца т. докато не бъдат извадени характер, за които се посочва. Въпреки това, по отношение на S. първо характер ще бъде запомнен в позицията, посочи от старата стойност на с. и едва след това стойността на S се увеличава. Нападатели символ е както на стойност, която се сравнява с '\ 0'. В крайна сметка, всички герои са копирани, включително крайния '\ 0'.

Забелязвайки, че сравнението с '\ 0' не е необходимо (както в C различна от нула стойност на израза в състоянието се лекува и как тя е истината), можем да направим още един и последен програма за намаляване на текста:

/ * Strcpy: копие т и в един ред;

Вариант 3 показалка * /

невалидни strcpy (знак * S, знак * т)

Въпреки, че на пръв поглед, че сме получили, изглежда загадъчна, но толкова по-удобно влизане, и трябва да го овладее, както и в програми за C често ще се срещне с нея.

Що се отнася до strcpy в стандартната библиотека . той се връща като свой резултат указател към ново копие на низа.

Втората програма, която смятаме, че тук е strcmp (S, T). Той сравнява кодовите конци S и Т и връща отрицателно, нула или положителна стойност, съответно, ако редицата е лексикографски по-малко от, равно или по-голямо от т низ. Резултатът се получава чрез изваждане на първата несравнимо символ на S и т.

/ * Strcmp: резултати <0 при s

> 0, когато е> т * /

Int strcmp (овъгляване и [], знак т [])

за (I = 0; и [Ь] == т [Ь]; и ++)

Свързани статии

Подкрепете проекта - споделете линка, благодаря!