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

Стрелката е аритметика, масиви.

Масивите, индексиране оператор, основни операции на указатели
Практически примери - функции strcpy и strlen
вместо заключение
Полезни упражнения
Позоваването

Поставянето на предмети в RAM

С изключение на по-горе, друг показалка аритметиката не е определена - тяхното използване ще доведе до програма за съставяне на грешки. Например, една грешка компилатор ще доведе до опит да добавите две насоки или сравнение на указатели към различни видове обекти, опит изваждане на броя на показалеца с плаваща запетая и така нататък. Същите аритметични операции, които са приложими към направленията, в повечето случаи има значение само в контекста на масиви (поради тази причина указател аритметика и масиви обикновено се третират едновременно).

Масивите, индексиране оператор, основни операции на указатели

Array - подреден набор (събиране) на подобни обекти, поставени в един блок памет последователно. Комбинации от обекти, които изграждат масива се наричат ​​масив елементи. Всеки елемент на масива съответства на серийния номер - на индекса. Индексиране на елементи започва с нула. първоначалното (първи) елемент на масива има индекс 0, след него (втори) - индексът 1 при втория (трета) - .. 2 индекс и т.н. последния елемент на масива на к елементи има индекс на к - 1.

Поставянето на предмети в RAM

Фиг. 1. спектър на К елементи

По-конкретно, на принципите на информационните масиви и основните операции на указатели, имайте предвид следното прост пример.

Масивите, както и всякакви други предмети, които могат да бъдат поставени в стека и на куп. Първо, помислете за поставянето на масиви в комина. В първия ред на код изпълнява основната функция е мястото:

В съответствие с оператора на семантиката индексиране, тук се премества към VEC масив обект с индекс 2 и получената обекта се определя нова стойност - номер 103 (Фигура 6) любимци за този обект памет клетка е написано.


Фиг. 7. указател към елемент на масива на к обекти

Ако р точки към обект, който не е елемент на масива, резултатът от допълнение с р число не е определена (и грешка компилатор като допълнение не води - възникне грешка по време на изпълнение на програмата).

В нашия случай, ВЕЦ - указател към началния елемент на масива, следователно, когато се оценява израз ВЕЦ + 2, ние трябва да получим указател няма на секундата след първоначалната, т.е., третият елемент на масива ... От гледна точка на нашите предположения за местоположението на обекти в паметта, имаме:

VEC + 2 = VEC + 2 * sizeof (кратко) = 0xF838 + 2 * 2 = 0xF838 + 4 = 0xF83C.

Ако печат масив с индекс стойност 2 и на обекта, посочен от ВЕЦ + 2:

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

Може би, експресията на време (* р ++ = * S ++) на пръв поглед изглежда неразбираем, но тази публикация е полезно, на практика е установено, такъв код. Значението на разбирането му е фактът, че ние сме анализирали примера, представен в книгата Бярне Строуструп «C ++ език за програмиране" [1] и Брайън Kernighan и Денис Ричи «C език за програмиране" [2]. Освен това, значението на познаване на аспектите на изпълнението на strcpy функция може да се намери в книгите на Джоел Spolsky на "Джоел за програмиране," [6] и "Джоел: и отново за програмиране" [10].

В заключение този раздел ние считаме, че изваждането на един указател от друг. С използването на тази операция се реализира, в частност, функцията за изчисляване на дължина линия strlen стандарт C / C ++ библиотека.

вместо заключение

Значителна част от грешката, когато се занимават с изтичане на памет, свързани с него, т.е.. Д. без изхвърляне или неправилно освобождаване, разпределени преди купчина. По-специално, често срещана грешка е да се премахнат твърди предмети, вместо на оператора за изтриване оператор изтриване []. Такива оператори за замяна не могат да се появят при изтриване на масив от вградени типове обекти, но унищожаването на множество сложни обекти, като масив от низове (обекти от тип станд :: низ), използвайте изтриване оператор ще доведе до това, което ще бъде изтрит само на първия ред, а останалата част ще остане в памет. За да се открият такива грешки, създадени специални инструменти, един от които беше обсъдено в първата част на статията.

По този начин, операцията по памет изисква специално внимание и грижи, малтретиране на резултатите си в доста трудно за откриване на грешки и значителна загуба на време в разработването на софтуер.

Полезни упражнения

  1. Извършва клавиатура вход две целочислени масиви за създаване и показване на третия масив получен чрез вмъкване на всички елементи от втория масив след предварително определен първи елемент.
  2. Извършване на въвеждане от клавиатурата две линии, за да създавате и показване на третия низ, който е конкатенацията на влезлите.

Позоваването

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

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