Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 178
1

Передача ссылки на массив в функцию

22.07.2014, 02:43. Просмотров 998. Ответов 6
Метки нет (Все метки)

запутался в 3 соснах... Помахайте плиз)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//обьявляю и инициализирую функцию
void fShow(char *pNameArray){ 
    for (int i = 0; i < 30; ++i){
        for(int k = 0; k < 3; ++k){
            
            cout    << pNameArray[i][k];
            
        }
        cout    << endl;
    }
}
 
 
int main (){
 
//------
//код
 
    case 4: fShow(pNameArray); // вызываю функцию в которой передаю сылку на массив с char  данными
return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2014, 02:43
Ответы с готовыми решениями:

Передача ссылки и указателя в функцию
передал ссылку в одну функцию - нормально, передал в другую - выводит неверное значение, тоже самое...

Передача в функцию - ссылки, указатели, константы
Вот программа: #include &lt;iostream&gt; void fun(int &amp;rhs) { rhs++; } int main()

Передача ссылки на обьект класса в функцию
Определен класс в хэддере: class List{ public: //... void Add(const List *list); ...

Передача ссылки в функцию в DLL
Здравствуйте. По этому мануалу сделал DLL https://msdn.microsoft.com/ru-ru/library/ms235636.aspx...

Странный порядок вызова конструкторов и передача временного обьекта в функцию в качестве неконстантной ссылки
Есть код //g++ 5.4.0 #include &lt;iostream&gt; struct foo { foo(int){std::cout &lt;&lt; &quot;int...

6
rikimaru2013
2510 / 1173 / 354
Регистрация: 30.11.2013
Сообщений: 3,778
22.07.2014, 03:12 2
1) Если хотите работать с адресом, то
C++
1
cout << *(pNameArray+i*3+k); // где 3 максимальное кол индексов во 2 массиве arr[][3]
2) если как с массивом - передавая двухмерный массив, как в примере выше компилятор не зная, макс. кол элементов во 2 вложении не будет знать на что же умножать адресс и бла бла бла. Пример кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
char pNameArray[100][100] = {};
 
 
void fShow(char pNameArray[][100]){ 
    for (int i = 0; i < 30; ++i){
        for(int k = 0; k < 3; ++k){
            
            cout    << pNameArray[i][k];
            
        }
        cout    << endl;
    }
}
int main(int argc, char *argv[])
{
    fShow(pNameArray);
    
    return 0;
}
3) Что-то по приятней глазу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
#define M 30
#define N 3
 
char pNameArray[M][N] = {};
 
void fShow(char pNameArray[][N])
{ 
    for (int i = 0; i < M; ++i)
    {
        for(int k = 0; k < N; ++k)
           cout << pNameArray[i][k];
                  
        cout << endl;
    }
}
int main()
{
    fShow(pNameArray);    
    return 0;
}
0
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 178
22.07.2014, 03:19  [ТС] 3
хочк работать как с массивом
мне в прототип надо передать колличество столбцов вторым числом?
C++
1
2
void show(char pNameArray[k], int k)
             {} ?
а из мейна отправить адресс массива и количество столбцов?
C++
1
2
3
int main(){
show(pNameArray, k);
}
Добавлено через 1 минуту
Я же обьявил ранее переменную К в мейне почему ее не видно?
0
rikimaru2013
2510 / 1173 / 354
Регистрация: 30.11.2013
Сообщений: 3,778
22.07.2014, 03:23 4
Не хотите читать 3 мой вариант? Ждите других кто поможет вам прочитать мой 3 вариант, и перетащить готовые уже решения в ваш проект )))))
0
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 178
22.07.2014, 04:04  [ТС] 5
нет, хочу понять почему у меня не работает, тупо копи-паст не катит) в любом случае спасибо за помощь )

Добавлено через 19 минут
судя по всем вашим 3 вариантам обьявление разщмера указателя на массив происходит до мейна. в этом вся соль...
0
Ilot
Эксперт С++
1843 / 1199 / 344
Регистрация: 16.05.2013
Сообщений: 3,157
Записей в блоге: 5
Завершенные тесты: 1
22.07.2014, 08:41 6
MMt, если хотите передать ссылку на массив так и передавайте ссылку на массив. Выглядеть это будет следующим образом:
C++
1
2
3
4
5
6
7
8
9
const int N = 30;
const int M = 3;
void fShow(char (&pNameArray)[N][M]){ 
    for (int i = 0; i < N; ++i){
        for(int k = 0; k < M; ++k)
            std::cout << pNameArray[i][k] << ' ';
        std::cout << endl;
    }
}
1
aLarman
651 / 572 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
Завершенные тесты: 2
22.07.2014, 11:10 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const int N = 30;
const int M = 3;
void fShow(char **pNameArray){ 
    for (int i = 0; i < N; ++i){
        for(int k = 0; k < M; ++k)
            std::cout << pNameArray[i][k] << ' ';
        std::cout << endl;
    }
}
int main (){
 
//------
//код
 
    case 4: fShow(pNameArray); // вызываю функцию в которой передаю указатель на массив с char  данными
return 0;
}
не парьте мозг себе и человеку!

Добавлено через 1 минуту
MMt, одномерный массив char*, 2мерный char** и т.д
1
22.07.2014, 11:10
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2014, 11:10

Передача динамического массив в функцию
ругает когда передаю массивы в функцию -помогите ,как правильно это сделать? #include &quot;stdafx.h&quot;...

Передача указателя на массив структур в функцию
Здрвствуйте! Не могу сообразить почему вылетает segmentation fault в функции, inputDate при...

Передача в функцию указателя на динамический массив
Добрый день. Не могу понять одну вещь. Вот такой вот код работает. Создается массив из 10 элементов...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru