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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2010, 00:41   #21
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вообще то там указан тип char* (указатель на char, в Делфи PAnsiChar).

Код:
 var m : array of  char;
      s : string;
begin
  s:="srgsekjrng jnlkregnrjg   rg";
  for i:=1 to 20 do
  
      if s[i]<>" " then
      begin
         setlength(m , length(m)+1);
         m[ length(m)] := s[i];
      end;
end;
это лучше всего перевести так
Код:
{
    char* s="srgsekjrng jnlkregnrjg   rg";
    char* m=(char*)malloc(1);//приводим из типа void* к типу char*
    int m_l=0;//типа длина строки
    m[m_l]=0;//терминалим строку
    for(int i=0;i<20;i++)
    {
        m=(char*)realloc(m,m_l++);//о как:)
        m[m_l]=0;//опять терминалим строку
        m[m_l-1]=s[i];
    }
}
может не идеальный вариант но не плохой.

помни что в Делфи array и string по сути классы, а ты их хочешь пересобачить на процедуры.
Цитата:
значит ли это
да
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2010, 12:11   #22
Ru_DoLF
Ubuntu 10.04
Пользователь
 
Аватар для Ru_DoLF
 
Регистрация: 15.07.2010
Сообщений: 51
По умолчанию

Цитата:
возможен ли такой код (что в нём исправить?) -

Код:
 s =  (char *)realloc(sizeof(char) * (strlen(s)+1));
 s = s + 'a';
Возможен если s это экземпляр типа с перегруженным оператором "+".
Язык образует среду мышления и формирует представление о том, о чем мы думаем (Б. Л. Уорф)
Ru_DoLF вне форума Ответить с цитированием
Старый 09.12.2010, 15:01   #23
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Ru_DoLF, не путай человека перегрузкой.
читаем внимательно первый пост, там С, а не плюсы.

кстати код возможен, char, это же число.
в итоге выйдет типа s=&s['a'];(тем кто с Делфи так привычнее наверно)
смещение указателя короче.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2010, 21:43   #24
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Пепел Феникса , спасибо за интерпретацию фрагмента кода -
Код:
{
    char* s="srgsekjrng jnlkregnrjg   rg";
    char* m=(char*)malloc(1);//приводим из типа void* к типу char*
    int m_l=0;//типа длина строки
    m[m_l]=0;//терминалим строку
    for(int i=0;i<20;i++)
    {
        m=(char*)realloc(m,m_l++);//о как:)
        m[m_l]=0;//опять терминалим строку
        m[m_l-1]=s[i];
    }
}
и за то, что спасаешь меня от пут)) -
Цитата:
не путай человека
короче, я понял, что синтаксис в С какой-то прям инопланетный ))
буду разбираться)
Ru_DoLF, спасибо за советы))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 09.12.2010, 21:47   #25
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
короче, я понял, что синтаксис в С какой-то прям инопланетный ))
как я ненавижу такие высказывания, честно.
чем он необычен то?

а насчет процитированных моих слов, так я про перегрузку операторов говорил(она связанна с классами, коих в С нету)

зато в С/С++ не нужна такая функция как ord, chr(которые в общем то ничего и не делают) ибо символ и его код(в численной переменной) поидее одно и тоже для программы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2010, 22:24   #26
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

во! есть несоответствие -
адрес мы получаем так( нашёл учебник подробный) -
Код:
 a  = &b ;
значение так -
Код:
*a  = b;
а объявляем почему-то как будто значение а не указатель -
Код:
char * a;
ведь нельзя же так -
Код:
char * a= b ; //  следуя псевдологике моей это = char( * a= b)  но это же не одно и то же ?
Пепел Феникса, если ты ещё здесь - прокомментируй, пожалуйста!
--------------------------------------
ан нет.....по пример Пепла Феникса(скланяю ник) это и есть значение.....тогда вообще....странно... -
Цитата:
char* s="srgsekjrng jnlkregnrjg rg";
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 09.12.2010 в 22:39.
vedro-compota вне форума Ответить с цитированием
Старый 09.12.2010, 22:44   #27
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Тип char соответствует Паскалевскому Char, а char* - PChar. Звёздочка в типе говорит, что это указатель(Pointer) на тип. Когда звёздочка встречается в выражении, то это разыменование указателя. Литерал строки имеет тип const char*.
Код:
const char* a = "Hello";
char* b = a + 2; // char* - тип переменной b
// a - указатель на строку Hello, но фактически он указывает на первый символ. а + 2, соответственно, будет указывать на третий

putc (*b); // выведет l
netrino вне форума Ответить с цитированием
Старый 09.12.2010, 23:27   #28
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Тип char соответствует Паскалевскому Char, а char* - PChar.
как бы то ни было не совсем, он соответствует:
signed char=Char+SmallInt;
unsigned char=Char+Byte;
но это мелочи.
Цитата:
char * a;
тут звездочка относится к типу, а не к a
переменная a типа char*
Код:
char* s="srgsekjrng jnlkregnrjg rg";
обьявляется переменная s типа char*(указатель на символ)
и инициализируется указателем на строку в кавычках(а точнее на её первый символ)

Цитата:
по примеру Пепла Феникса(склоняю ник)
я этого в принципе не требую, просто прошу
(не люблю ся предметом чувствовать)

ЗЫ:
интерестно как тебя двухмерные дин массивы убьют
char**
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2010, 23:58   #29
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Цитата:
интерестно как тебя двухмерные дин массивы убьют
они-то мне и нужны! (прошу прощения за отвратительные орфографические ошибки((...)-
(определитель матрицы задали рассчитать).
вот я читаю -
здесь -
Цитата:
будет уже указателем на ... указатель! т.е. будет иметь тип int**. Стало быть под него надо выделить память
view source
print?
Код:
1	int **m; // указатель на указатель на int
2	m = (int**)calloc(3,sizeof(int*));
Итак, массив указателей создан и он где-то в памяти. Теперь надо под каждый из этих указателей выделить память, соответствующую второй размерность. Это мы делать умеем.
view source
print?
Код:
1	for (int i=0; i<3; i++)
2	*(m+i) = (int*)calloc(4,sizeof(int));
Обратите внимание на запись *(m+i). Как говорилось выше, мы используем доступ к элементу массива с помощью указателя. Получив доступ к этому элементу массива указателей, мы можем выделить память и после этого перейти к следующему элементу. Можно бы было написать и так
view source
print?
Код:
1	m[i] = (int*)calloc(4,sizeof(int))
;
но в профессиональном плане чаще всего встречается именно первая запись.
вроде , всё понятно - но не понятно -как же получить доступ к элементу массива- то ?
вообще так(из учебника) -
Цитата:
m[i][j] = 1;
но это если настоящий массив, а у меня указатель .......
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 10.12.2010 в 00:03.
vedro-compota вне форума Ответить с цитированием
Старый 10.12.2010, 00:57   #30
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

есть ответ здесь -
Цитата:
Таким образом, объявление arr2[4][3] порождает в программе три разных объекта: указатель с идентификатором arr, безымянный массив из четырех указателей и безымянный массив из двенадцати чисел типа int. Для доступа к безымянным массивам используются адресные выражения с указателем arr. Доступ к элементам массива указателей осуществляется с указанием одного индексного выражения в форме arr2[2] или *(arr2+2). Для доступа к элементам двумерного массива чисел типа int должны быть использованы два индексных выражения в форме arr2[1][2] или эквивалентных ей *(*(arr2+1)+2) и (*(arr2+1))[2]. Следует учитывать, что с точки зрения синтаксиса языка СИ указатель arr и указатели arr[0], arr[1], arr[2], arr[3] являются константами и их значения нельзя изменять во время выполнения программы.
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив Golovastik Общие вопросы C/C++ 10 27.05.2010 20:36
Динамический массив supra89kren Общие вопросы C/C++ 4 25.03.2010 20:23
Динамический массив Lemo Помощь студентам 5 16.09.2009 06:26
Кэш память, или динамический массив? slips JavaScript, Ajax 1 07.09.2009 17:38
Динамический массив. Mickle Помощь студентам 9 21.06.2007 20:31