Форум программистов, компьютерный форум CyberForum.ru

Передача char в функцию - C++

Восстановить пароль Регистрация
 
lion_wine
8 / 8 / 0
Регистрация: 08.03.2014
Сообщений: 101
27.04.2014, 00:23     Передача char в функцию #1
Привет всем! Помогите, что неправильно: есть функция
C++
1
2
3
4
5
6
    void send_new_object(char *g, char *h, int j)
    {
        char name_nach_punkta = *g;
        char name_kon_punkta = *h;
        nomer_marshrouta = j;
    }
в которую посылается
C++
1
2
3
4
5
char add_name_nach_punkta[30];
    char add_name_kon_punkta[30];
    int add_nomer_marshrouta;
...
send_new_data(add_name_nach_punkta, add_name_kon_punkta, add_nomer_marshrouta);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,923
27.04.2014, 00:25     Передача char в функцию #2
lion_wine, вы пытаетесь присвоить одной переменной значение всего массива.Либо копируйте массив,либо работайте с указателями.
Avazart
 Аватар для Avazart
6905 / 5145 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
27.04.2014, 00:26     Передача char в функцию #3
C++
1
2
3
4
5
6
void send_new_object(char *g, char *h, int j)
    {
        char name_nach_punkta = *g;
        char name_kon_punkta = *h;
        nomer_marshrouta = j;
    }
Смысл такой ф-ции?
lion_wine
8 / 8 / 0
Регистрация: 08.03.2014
Сообщений: 101
27.04.2014, 00:37  [ТС]     Передача char в функцию #4
а разве указатель уже не даст возможности обращаться к другим участкам памяти? а как передать весь массив?

Добавлено через 1 минуту
забыл дописать
C++
1
2
3
    char name_nach_punkta[30];
    char name_kon_punkta[30];
    int nomer_marshrouta;
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,923
27.04.2014, 00:55     Передача char в функцию #5
lion_wine, вы и передаете весь массив.Ошибка в другом.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
27.04.2014, 01:02     Передача char в функцию #6
S_el, не совсем, он передает указатель, к которому был автоматически приведен массив.
lion_wine, тут надо добавить, что массивы нельзя передавать по значению. Потому что они не объекты первого класса (по историческим причинам). Поэтому обычно массивы копируют поэлементно; т.е. указатель + размер и копия (функции strcpy, strncpy, memcpy, std::copy и т.п.) в другой массив.
Чтобы передать массив целиком, как объект, можно использовать, например, std::array (С++11) или эквивалентный подход с собственным типом.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 01:03     Передача char в функцию #7
Цитата Сообщение от lion_wine Посмотреть сообщение
забыл дописать
Это где объявляется?
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,923
27.04.2014, 01:06     Передача char в функцию #8
Цитата Сообщение от DrOffset Посмотреть сообщение
S_el, не совсем, он передает указатель, к которому был автоматически приведен массив.
Фраза "передаете весь массив" намного более понятна,чем передача указателя.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
27.04.2014, 01:17     Передача char в функцию #9
Цитата Сообщение от S_el Посмотреть сообщение
Фраза "передаете весь массив" намного более понятна,чем передача указателя.
Если ты знаешь что за ней стоит, то да. Но лично мне показалось, что у автора как раз вся проблема из-за того, что он думал, что может передать "весь массив" разом.
konstantin vl
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 59
27.04.2014, 02:59     Передача char в функцию #10
C++
1
2
3
4
5
6
7
8
void send_new_object(char *g, char *h, int j)
    {
         char name_nach_punkta[strlen(g) + 1];
        strcpy(name_nach_punkta, g);
        char name_kon_punkta[strlen(h) + 1];
        strcpy(name_kon_punkta, h);
        nomer_marshrouta = j;
    }
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 11:38     Передача char в функцию #11
Цитата Сообщение от konstantin vl Посмотреть сообщение
C++
1
2
3
4
char name_nach_punkta[strlen(g) + 1];
...
char name_kon_punkta[strlen(h) + 1];
...
Смысл объявления локальных массивов?
konstantin vl
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 59
27.04.2014, 22:58     Передача char в функцию #12
Ты в аргументе передаешь целый массив, а указатель не указывает на целый массив он указывает только на первый элемент.
C++
1
2
char name_nach_punkta = *g;
        char name_kon_punkta = *h;  // здесь ты присваиваешь первый элемент.
Rioter
1 / 1 / 0
Регистрация: 27.04.2014
Сообщений: 19
27.04.2014, 23:38     Передача char в функцию #13
Добавлено через 4 минуты
C++
1
2
3
4
5
6
    void send_new_object(char *g, char *h, int j)
    {
        char name_nach_punkta = *g;
        char name_kon_punkta = *h;
        nomer_marshrouta = j;
    }
Здесь вы пытаетесь присвоить char name_nach_punkta содержимое первого элемента из указателя g и так же с char name_kon_punkta = *h;

Добавлено через 5 минут
Как же объяснить.... Когда вы пишите название массива ( massive_name ), программа воспринимает его как адрес первого элемента массива в оперативной памяти, а когда рядом указываете номер элемента( massive_name[number_of_element] ) переходит относительно этого адреса на number_of_element шагов.

Добавлено через 3 минуты
следовательно, принимающая ф-ция должна записать в указатель адрес первого элемента массива и относительно этого указателя вызывать элементы(как я описал в своем примере кусков кода). Извините если где-то ошибся, но вроде все правильно.

Добавлено через 8 минут
Вот полный рабочий пример написал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
void func(char * mass, int n){
    for(int i=0;i<n;i++){
        cout<<mass[i];
    }
}
 
int main(){
    char massive[64]="Example";
    func(massive,64);
    system("pause");
    return 0;
}
Добавлено через 2 минуты
А вот если надо передать один конкретный знак:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using namespace std;
 
void func(char char1){
    cout<<char1;
}
 
int main(){
    char massive[64]="Example";
    func(massive[0]);
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 02:03     Передача char в функцию
Еще ссылки по теме:

C++ Передача в функцию массива char

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

Или воспользуйтесь поиском по форуму:
konstantin vl
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 59
28.04.2014, 02:03     Передача char в функцию #14
alsav22, а вдруг его функция изменит исходное значение а он этого не хочет, можно конечно поставить const прочесть весь массив через указатель до \0 , но лучше все же сначала объяснить автору как это работает.
Yandex
Объявления
28.04.2014, 02:03     Передача char в функцию
Ответ Создать тему
Опции темы

Текущее время: 20:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru