Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2012, 11:35   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию указатель массива

Код:

void test(char *s)
{
s++;
}

int main()
{
char str[]="This is my string";
char *s;
s=str;

test(s);
printf("current: %c",*s);
}
задумка такая, что в функцию передается указатель для обработки строки посимвольно. И необходимо, чтобы после завершения функции test, указатель s сохранил свою позицию в строке. В данном примере, на экране должен отобразиться второй символ строки "h", но при обращении к указателю позиция нулевая. Можно ли как-то сделать сохранение позиции?

(есть идея использовать глобальную переменную для указателя, чтобы сохранялась позиция, но меня интересует первичный метод, без глобальных переменных).
Артэс вне форума Ответить с цитированием
Старый 16.05.2012, 11:47   #2
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>

char * test(char * str)  {
    return ++str;
}

int main() {
   char str[]="This is my string";
   char *s = str;
   s = test(s);
   printf("Current: %c\n", *s);
   return 0; 
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 16.05.2012, 12:16   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

еще есть ссылка на указатель и указатель на указатель.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.05.2012, 14:08   #4
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Вариант с возвращаемым значением не совсем удобен. Вообще, хочу сделать альтернативу считывания файла, но только с массива. Если при считывании символа из файла, сохраняется позиция в файле, то интересно, каким образом это реализовано в Си? Позиция хранится в глобальной (или статичной) переменной, или как-то еще?
Артэс вне форума Ответить с цитированием
Старый 16.05.2012, 14:20   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
то интересно, каким образом это реализовано в Си? Позиция хранится в глобальной (или статичной) переменной, или как-то еще?
Зачем фантазировать? Можно и подумать головой, что никто в боьлшой либе не будет засирать глобальное пространство имен.

Вот что такое FILE:
Код:
struct _iobuf {
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
        };
p51x вне форума Ответить с цитированием
Старый 16.05.2012, 14:27   #6
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Но ведь где-то переменная структуры хранится, потому что открывая файл, мы получаем только указатель на те данные. Меня этот вопрос и интересует, где сама переменная хранится? Может она как локальная переменная, но со спецификатором static?

Последний раз редактировалось Артэс; 16.05.2012 в 14:32.
Артэс вне форума Ответить с цитированием
Старый 16.05.2012, 14:51   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Но ведь где-то переменная структуры хранится, потому что открывая файл, мы получаем только указатель на те данные. Меня этот вопрос и интересует, где сама переменная хранится? Может она как локальная переменная, но со спецификатором static?
это хранит система, и это не глобальные данные, а данные файлового дискриптора.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.05.2012, 15:06   #8
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Понятно. Тогда наверное для реализации моей задумки можно использовать статичный глобальный указатель?

static char *s;
и остальные функции, работающие с этим указателем будут в одном файле.

Не расходно ли будет обращаться к такому указателю?
Артэс вне форума Ответить с цитированием
Старый 16.05.2012, 17:53   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Но ведь где-то переменная структуры хранится, потому что открывая файл, мы получаем только указатель на те данные.
Вы о чем?....
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти минимальний елемент массива. ПРием данних как указатель на начало масива , и как копию данных. galaxyblazer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 17.04.2012 16:57
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Указатель... Romario92 Общие вопросы C/C++ 16 22.10.2010 20:37
Обращение к элементам массива через указатель Miha85193 Общие вопросы Delphi 21 19.07.2010 18:43
Обращение к элементам массива через указатель в С++ серг Помощь студентам 1 24.11.2009 01:30