Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

работа с массивами

81K
20 июля 2012 года
E1dos
7 / / 19.07.2012
Приветствую всех!
У меня есть прог-а в которой надо разобраться, все шло неплохо, пока не встретил проблемку...
Так вот, прог-а на Турбо С. Выглядит примерно так:

Код:
#include <stdio.h>
...
unsigned char b[448];
unsigned long m
...
main()
{
    ...
    function1(b);
    ...
}


function1(unsigned char *b)
{
    ...
    function2(b+m)
    ...
}

function2(unsigned char *b)
{
    int i;
    i = b[m];
    ...
}
Вопрос: Как работает "function2(b+m)", т.е. в функцию-2 отправляют массив_чар+переменная_лонг (их сумму)? Допустим массив "b" состоит из 0 и 1, и при function2(b+m), какое значение примет function2(unsigned char *b)?

Буду очень рад помощи, заранее Благодарю!
79K
20 июля 2012 года
MaximusFk
12 / / 07.07.2012
Для начала я советую прописать тип возвращаемых значений для функций, далее в function2 пойдет сумма именно первого индекса массива и переменной т.к. b == b[0];, еще могут возникнуть проблемы при суммировании, ведь переменная m и массив b имеют разные типы, в данном случае длинный целочисленный, а второй символьный массив, но поскольку каждый символ имеет табличный номер то скорее всего именно он и просуммируется и функция получит под индексом 0 массива уже другой символ
81K
20 июля 2012 года
E1dos
7 / / 19.07.2012
Цитата: MaximusFk
Для начала я советую прописать тип возвращаемых значений для функций, далее в function2 пойдет сумма именно первого индекса массива и переменной т.к. b == b[0];, еще могут возникнуть проблемы при суммировании, ведь переменная m и массив b имеют разные типы, в данном случае длинный целочисленный, а второй символьный массив, но поскольку каждый символ имеет табличный номер то скорее всего именно он и просуммируется и функция получит под индексом 0 массива уже другой символ


Т.е. допустим b[0] = 1, а m = 5.
То b+m это 1+5 или b[0+5] или табличный код значения b[0] ( допустим табличный код 1, это - 47) + 1 итого 52?

P.S. Понимаю, можно все самому разобрать, написав код и проверив что выйдет, но к сожалению пишу с инет клуба, пока нету рабочего компа, а код распечатанный на А4. )))

P.P.S. функции возвращают левые глобальные переменные, результат многочисленных математических операций, но там я в принципе понял)

79K
21 июля 2012 года
MaximusFk
12 / / 07.07.2012
Цитата: E1dos
Цитата: MaximusFk
Для начала я советую прописать тип возвращаемых значений для функций, далее в function2 пойдет сумма именно первого индекса массива и переменной т.к. b == b[0];, еще могут возникнуть проблемы при суммировании, ведь переменная m и массив b имеют разные типы, в данном случае длинный целочисленный, а второй символьный массив, но поскольку каждый символ имеет табличный номер то скорее всего именно он и просуммируется и функция получит под индексом 0 массива уже другой символ


Т.е. допустим b[0] = 1, а m = 5.
То b+m это 1+5 или b[0+5] или табличный код значения b[0] ( допустим табличный код 1, это - 47) + 1 итого 52?

P.S. Понимаю, можно все самому разобрать, написав код и проверив что выйдет, но к сожалению пишу с инет клуба, пока нету рабочего компа, а код распечатанный на А4. )))

P.P.S. функции возвращают левые глобальные переменные, результат многочисленных математических операций, но там я в принципе понял)


принцип в том что числа идут не через единицу, но по возрастанию, именно по этому 47+1=52 просто символа от 48 до 51 нет, просто компилятор видит число в 16ричной системе исчисления, в переменную приводится в десятичную. в общем плане будет именно 1 + '5' т.е. код символа увеличится на единицу, здесь думаю будет после выполнения уже '6', смысл такого выражения не изменится, но в одной ячейке памяти может храниться только один символ и математическое суммирование будет уже не актуально, как если бы был целочисленным вроде int или вещественный float, double

2.1K
21 июля 2012 года
disputant
95 / / 28.05.2007
Вообще-то, согласно любому учебнику, если есть

type * var, то var+m, где m - целое, будет указатель на m-ый элемент (&var[m]).

Так что в конкретном случае function1 получает &b[0], передает в function2 &b[m], каковая функция присваивает i значение b[2m]...


Код:
#include <stdio.h>

unsigned char b[26] = "abcdefghijklmnopqrstuvwxy";
unsigned long m = 5;

unsigned char function1(unsigned char *b);
unsigned char function2(unsigned char *b);


main()
{
    printf("%c\n",function1(b));
}


unsigned char function1(unsigned char *b)
{
    return function2(b+m);
}

unsigned char function2(unsigned char *b)
{
    int i;
    i = b[m];
    return i;
}
выводит k...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог