работа с массивами
У меня есть прог-а в которой надо разобраться, все шло неплохо, пока не встретил проблемку...
Так вот, прог-а на Турбо С. Выглядит примерно так:
...
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];
...
}
Буду очень рад помощи, заранее Благодарю!
Т.е. допустим b[0] = 1, а m = 5.
То b+m это 1+5 или b[0+5] или табличный код значения b[0] ( допустим табличный код 1, это - 47) + 1 итого 52?
P.S. Понимаю, можно все самому разобрать, написав код и проверив что выйдет, но к сожалению пишу с инет клуба, пока нету рабочего компа, а код распечатанный на А4. )))
P.P.S. функции возвращают левые глобальные переменные, результат многочисленных математических операций, но там я в принципе понял)
Т.е. допустим 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
type * var, то var+m, где m - целое, будет указатель на m-ый элемент (&var[m]).
Так что в конкретном случае function1 получает &b[0], передает в function2 &b[m], каковая функция присваивает i значение b[2m]...
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;
}