Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
4 / 4 / 3
Регистрация: 23.10.2012
Сообщений: 233
1

Подскажите использование char** на примере

26.01.2013, 13:52. Показов 4346. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите использование char** на примере
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2013, 13:52
Ответы с готовыми решениями:

Подскажите, пожалуйста, как преобразовать данные из excel в string или в char*, char perm [] в visual c++
Подскажите, пожалуйста, как преобразовать данные из excel в string или в char*, char perm также...

подскажите на примере
Знакомый попросил сделать сайт. Сразу скажу, что никогда этим не занимался, если не считать пару...

Использование функции округления на конкретном примере
Как использовать функцию округления на конкретном примере: #include <iostream> #include <Math.h>...

Подскажите как найти СКНФ и СНДФ на примере:
(!z->x)<->(!x|y) как бы понимаю, а ответ не сходится(не по таблице истинности). Заранее спасибо! !...

30
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
26.01.2013, 14:02 2
Массив массивов типа чар - текст. Каждая строка текстового документа = char*. Все строки это массив строк. Вывод - char** = тексту.
0
4 / 4 / 3
Регистрация: 23.10.2012
Сообщений: 233
26.01.2013, 14:06  [ТС] 3
А как бы на примере увидеть инициализацию массива массивов , да еще с использованием typedef

Добавлено через 47 секунд
А то паровозик не сильно то гудит
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
26.01.2013, 14:20 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <cstring>
 
int main ()
{
  char str[] = "A null pointer is returned if there are no tokens left to retrieve.";
  char * pch;
  size_t countWords = 0, i = 0;
  char ** words;
 
  // Определяем количество слов в Строке
   while (str[i] != '\0')
  {
    if( isalpha(str[i]) && ! isalpha(str[i + 1]))
        countWords++;
    i++;
  }
 
   words = new char*[countWords];
 
  i = 0;
  pch = strtok (str," ,.!?");
  while (pch != NULL)
  {
    words[ i ] = new char[strlen(pch) + 1];
    strcpy( words[ i ],pch );
    pch = strtok (NULL, " ,.!?");
    i++;
  }
 
  for ( i = 0; i < countWords ; i++)
  std::cout << words[ i ] << std::endl;
 
   for ( i = 0; i < countWords ; i++)
      delete []words[i];
     delete [] words;
 
 
  return 0;
}
2
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
26.01.2013, 15:46 5
Пример попроще:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
void
print_strings (char **strs, int count)
{
  int i;
 
  for (i = 0; i < count; i++)
    printf ("%s\n", strs[i]);
}
 
int
main (void)
{
  char *s1[3] = { "a1", "a2", "a3" };
  char *s2[5] = { "b1", "b2", "b3", "b4", "b5" };
 
  print_strings (s1, 3);
  print_strings (s2, 5);
 
  return 0;
}
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.01.2013, 15:51 6
Цитата Сообщение от I love myguitar Посмотреть сообщение
Подскажите использование char** на примере
Лучше вообще не использовать ( использовать к примеру std::vector<std::string> )
0
5 / 5 / 1
Регистрация: 02.07.2012
Сообщений: 45
27.01.2013, 21:43 7
Самый простой пример - динамический двумерный массив:
C++
1
2
3
4
5
6
7
8
9
int **matrix = new int*[ size ];  //создание массива указателей (как раз двойной указатель)
for( int i = 0; i < size; i++ )
{
    matrix[ i ] = new int[ size ]; //инициализация каждого указателя динамическим массивом
    for( int j = 0; j < size; j++ )
    {
        matrix[ i ][ j ] = rand()%10; //получается двумерный массив, который и заполняем
    }
}
(Хотя про вектора плюсую)
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.01.2013, 21:46 8
Lexp, Не речь именно про строки...
0
5 / 5 / 1
Регистрация: 02.07.2012
Сообщений: 45
27.01.2013, 21:48 9
В каком смысле?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.01.2013, 21:50 10
В том что при работе char* нужно заботится о '\0' в конце стоки и границах массива
0
5 / 5 / 1
Регистрация: 02.07.2012
Сообщений: 45
27.01.2013, 21:55 11
А, понял, недоглядел.
С чарами тогда однозначно вектора, уж не пинайте сильно.
0
Croessmah
28.01.2013, 12:32
  #12
 Комментарий модератора 
Требования администрации форума должны выполняться немедленно и безусловно.
Санкции могут быть применены без предупреждения по усмотрению администрации форума.
Оскорбление, пренебрежение и другие проявления неуважения к администрации форума и ее действиям недопустимы, и могут повлечь применение санкций, вплоть до бана.
Ситуации, не описанные в настоящих Правилах, решаются по усмотрению администрации форума.
Действия модераторов могут быть обжалованы у администраторов форума.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
29.01.2013, 14:56 13
Ещё вариант - необходимость изменения значения самого указателя на char в функции. Например, в результате манипуляций со строкой (массивом char'ов) в функции её длина стала больше, чем память, в которой лежит строка. Тогда память эту можно перевыделить, но для этого придётся изменить сам адрес строки Поэтому сам указатель придётся передать по указателю.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 22:09 14
silent_1991, пример фейковый, ибо тогда ссылка лучше )
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
30.01.2013, 10:16 15
Kgfq, не согласен. В случае со ссылкой вызов функции не даст вам никакой информации о том, изменяется ли значение параметра внутри функции или нет. В случае с указателем дополнительное взятие адреса массива даёт некоторую информацию о возможных изменениях самого этого адреса.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.01.2013, 14:15 16
Цитата Сообщение от silent_1991 Посмотреть сообщение
Kgfq, не согласен. В случае со ссылкой вызов функции не даст вам никакой информации о том, изменяется ли значение параметра внутри функции или нет. В случае с указателем дополнительное взятие адреса массива даёт некоторую информацию о возможных изменениях самого этого адреса.
Для этого есть осмысленные имена и коментарии, ну и конечно логично что просматривающий ознакомлен с прототипами используемых ф-ций.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
31.01.2013, 14:44 17
Avazart, тем не менее, я придерживаюсь мнения, что вызов
C++
1
foo(&bar);
говорит несколько больше, нежели
C++
1
foo(bar);
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.01.2013, 14:47 18
Да по моему несложно догадаться что foo() изменяет переменную так как не возвращает значения, а изменять глобальные переменные внутри ф-ции плохой тон.

Конечно можно предположить что ф-ция может просто выполнять действия без возврата значений, но это как бы должно отражаться в названии ф-ции или коментариях.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
31.01.2013, 15:04 19
Avazart, функция может выполнять некоторые действия, но в качестве побочного эффекта изменять значение переданного параметра. В этом случае помещать в название пару дополнительных слов, ИМХО, оверхэд. С другой стороны, всего один символ амперсанда может предоставить ту же информацию.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.01.2013, 15:06 20
Цитата Сообщение от silent_1991 Посмотреть сообщение
В этом случае помещать в название пару дополнительных слов,
Ну тут логично разбивать на две ф-ции, либо длинное название, либо коментарии...
0
31.01.2013, 15:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2013, 15:06
Помогаю со студенческими работами здесь

Подскажите, пожалуйста в чем моя ошибка в этом примере?
// 2_2010.cpp : main project file. #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;stdio.h&gt;...

Использование JavaScript и локального хранилища для незначительных изменений страницы (на примере личного кабинета)
Видео: https://youtu.be/gBT4uxtSkFY?t=540 Начало темы с 9:00. А где-то с 9:08 лектор говорит:...

Подскажите, как лучше создать структуру БД MySQL 5. На конкретном примере
Здравствуйте! Подсабите пожалуйста в создании БД. Задача: создать 2-е таблицы. (1-я: Номер_Заказа,...

Подскажите где ошибка, в первом примере всё работает, но с классами отказ
import glob import sys import os import pprint if sys.platform == ('win'): dirname...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru