Найти в Дзене
D21nk Master

Работай со строками как боженька

Я думаю вы уже поняли,что основные конструкции языка си-это функции,чем больше вы их знаете в своей профессии-тем лучше.Так же чем эффективнее и лаконичнее вы пишите свои-тем эффективнее весь код в целом.

Но вот встаёт вопрос,а что если строку нужно передать в функцию? И ещё интереснее вопрос,что если нужно вернуть из функции строку?

Перед дальнейшими действиями попробуйте запустить следующий код:

void main()
{
char hello[]="Hello";
printf("%s\n",&hello[0]);
}

Передавать адрес первого элемента как строку?! D21nkMaster,ты что,поехавший? Спокойно,вы всё это время как раз и передавали как строку адрес первого элемента в функцию printf.

Значит-чтобы передать строку в функцию-достаточно так же принять адрес первого элемента,то есть указатель:

void showstr(char *str)
{
printf("%s\n",str);
}

И конечно же,если мы передаём не константную строку-то так же можем её свободно изменять.Раз уж мы передаём адрес первого элемента строки,значит мы можем и вернуть тот же адрес элемента первой строки.Для этого просто создаём функцию-указатель,чтобы она и возвращала указатель:

char *crypt(char *str)
{
for(int i=0;str[i];++i)
str[i]+=3;
return str;
}

Если у вас на данном этапе появились трудности-отдохните немного,попейте водички и вернитесь к началу.Уверен,у вас получится.

Вы уже понимаете,где это можно использоваться? Как раз в нашем шифровании-строку передавать в функцию и получать на выходе ключ.

Теперь сделаем пару шаг назад и вспомним об массивах.Напомню,массивы-это вроде переменных в переменной.Для этого легко придумать аллегорию,а вот для многомерных массивов-посложнее.

Вы представили себе коробку в коробке? Представьте себе вид сверху,и что эти коробки находятся в некоторой сетке,сетка пронумерована от 0 до n-1,в два направления,вроде координат:

-2

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

Теперь рассмотрим как со всем этим обращаться:

Создание

int array[2][2];

Обращение

//выводим первый элемент второго массива
printf("%d\n",arr[1][0]);

И наконец как можно обрабатывать элементы такого массива циклами:

for(int i=0;i<2;++i)
{
for(int j=0;j<2;++j)
printf("%d\n",arr[i][j]);
}

В следующем уроке я дополню тему двумерных массивов и мы наконец разберём аргументы ваших программ.Всего доброго!