PURE C: Передать массив строк(массив символов) в функцию
Интересует возможность передачи массива массивов символов(строк) в функцию с возможностью, изменять значения этих строк глобально.
#include #include void get(char ***s) < //пробовал еще (char **s[2]) *s[0] = "123"; return; >int main() < char *s[] = < "abc", "def" >; get(&s); printf("%s", s[0]); return 0; >
По логике вещей все должно работать — если передаем просто число a , то void get(int *a) , массив символов get(char **s) , а вот с массивом строк уже не получается. Как можно решить данную проблему?
Отслеживать
user277248
задан 24 дек 2017 в 19:14
user277248 user277248
87 1 1 серебряный знак 12 12 бронзовых знаков
Будьте проще — void get(char *s[]) < s[0] = "123"; return; >, описывайте то, что реально создаете int main() < char *s[] = < "abc", "def" >; get(s); printf(«%s», s[0]); return 0; > (обратите внимание, заменил &s на s в вызове get() ) и все будет работать (KISS-принцип)
24 дек 2017 в 20:07
Спасибо:) Оказалось, что у меня это все тоже работало(нет): просто в дебаге показывало что ошибка чтения. а при запуске все корректно отрабатывало
24 дек 2017 в 20:49
Может и зависит от компилятора, но я думаю, компилятор должен сказать, что тип параметра в объявлении функции void get(char ***s) не соответствует типу аргумента в вызове get(&s) (для char *s[] = <. >; )
Передать массив char, в функцию
Добрый день, не понемаю как можно в собственную функцию передать массив char. Собственно есть 2 примера, можете подсказать правильные или же нет? Укажите пожалуйста на ошибки. Среда VS2012. Я только просто начал изучать функции.
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
//1 #include using namespace std; int Max=5; void input(char v[],int n); void output(char b[],int m); int main(){ char nas[Max]; input(nas,Max);//ввод output(nas,Max);//вывод return 0; } void input(char v[],int n){ for(int i=0;in;i++){ cout<"Введите элементы = "<(i+1); cin>>v[i]; } } void output(char b[],int m){ for(int i=0;im;i++){ cout<"Индекс "<(i+1)<", элемент= "[i]; } }
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
//2 #include using namespace std; void input(char c[],int n); void output(char h[], int o); int main(){ char * vio= new char[5]; input(vio,5);//ввод output(vio,5);//вывод delete [] vio; return 0; } void input(char c[],int n){ for(int i=0;in;i++){ cout<"Элемент "<(i+1); cin>>c[i]; } } void output(char h[], int o){ for(int i=0;io;i++){ cout<"Ваши элементы "[ i]; } }
Передача массива в функцию, подсчет длины массива по указателю
-
В С++ массивы можно инициализировать следующим образом:
int arr[] = ; // длина массива определяется после инициализации
Как следствие, его можно передать в функцию таким же способом:
void func(int arr[])< //your code >
void func(int* arr) < //your code >int arr[5] = ;
Мы привыкли обращаться к элементам массива по индексам, но попробуйте скомпилировать и запустить следующие строки:
int main()< int arr[5] = ; cout
void func(int* arr, int length)< //your code >
Но в ряде задач длина входного массива может быть неизвестной. На этот случай тоже есть решение, мы можем анализировать данные, которые поступили в функцию по указателю, например:
int len(int* arr)
Крайне важно понять критерий по которому мы будем оценивать содержимое. В противном случае, можно получить не совсем то, что ожидалось.
Как передать массив char в функцию c
Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности
Public user contributions licensed under cc-wiki license with attribution required