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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2013, 22:58   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Си память

Помогите решить такую задачу:

Объявить массив mb как массив литерных указателей без указания количества элементов; инициализировать его значениями "11", "22", "xx", "yy", "zz". Определить количество байтов, которое занимает массив mb по результатам инициализации.

Итак:

char *mb[]={"11","22","xx","yy","zz"};

Сколько же занимает памяти этот массив mb?

Еще задание:
Прочитать из файла с прямым доступом в структуру запись с номером 18. Имя файловой переменной - fd18.
(Использовать с++ запрещено)

Последний раз редактировалось Praud; 06.03.2013 в 23:00.
Praud вне форума Ответить с цитированием
Старый 06.03.2013, 23:49   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Насколько я понимаю массив занимает 20 байт. Указатель занимает 4 байта, элементов 5, в результате 20
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 07.03.2013, 00:25   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Вы хотите сказать, что если будет так:
char *mb[]={"12312kdkfdkfkfd","22","xx","yy", "zz"};

То все равно mb будет занимать 20 байтов из-за того, что там 5 элементов? Что-то не похоже
Praud вне форума Ответить с цитированием
Старый 07.03.2013, 03:50   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Почему нет? Это массив не хранит строки, а только указатели.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 07.03.2013, 08:56   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Praud Посмотреть сообщение
Использовать с++ запрещено
А что разрешено?
waleri вне форума Ответить с цитированием
Старый 07.03.2013, 09:13   #6
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

С без плюсов.
Praud вне форума Ответить с цитированием
Старый 07.03.2013, 10:58   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Код:
FILE *fd18;

if ((fd18 = fopen("test.dat","rb"))==NULL) {
  printf("Ошибка при открытии файла.\n");
  exit(1);
}
Открываем файл....

Используя функцию
Код:
fread();
считываем необходимую запись из файла. Т.к. нужна 18 запись, замеряем размер структуры функцией
Код:
sizeof()
(sizeof(struct zapis)) и перемещаясь на (грубо говоря 18 структур от начала файла), считываем необходимую структуру (запись)...
Обязательно... Необходимо закрыть файл...
Код:
fclose(fd18)
Вроде ничего не упустил
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Stilet; 07.03.2013 в 19:40.
Bugrimov вне форума Ответить с цитированием
Старый 07.03.2013, 14:20   #8
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

То есть вот моя структура:
Код:
struct Raspred 
{
 char size[12];
float y1925;
float y1959;
float y1970;
float y1974;
}T1[4];
Я открываю файл
Код:
 FILE *fd18;

if ((fd18 = fopen("test.dat","rb"))==NULL) {
  printf("Ошибка при открытии файла.\n");
  exit(1);
}
и пишу
fread(sizeof(Raspred)) а далее как?) Что-то не пойму
Praud вне форума Ответить с цитированием
Старый 07.03.2013, 18:38   #9
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
Подмигивание

Цитата:
Сообщение от Praud Посмотреть сообщение
fread(sizeof(Raspred))
Неправильный синтаксис.
Пройдите по ссылке, думаю некоторые момента будут понятней.
http://chitay.org/c/13/fread.htm
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 07.03.2013, 21:18   #10
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Итак:
Код:
fread(Raspred, sizeof(Raspred),4,fd18)
Только где я тут читаю запись с номером 18?
Praud вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
память offname C# (си шарп) 1 01.10.2011 10:33
кеш память ***СкаЙ*** Компьютерное железо 0 01.03.2011 21:23
Оперативная память elektroniks Компьютерное железо 4 20.02.2011 13:59
Память Ghennadiy Общие вопросы Delphi 9 25.08.2009 09:23
Динамическая память!!! Doholyan Паскаль, Turbo Pascal, PascalABC.NET 12 30.06.2009 17:11