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

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

Восстановить пароль Регистрация
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.07.2014, 02:43     Передача ссылки на массив в функцию #1
запутался в 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
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;
}
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
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 минуту
Я же обьявил ранее переменную К в мейне почему ее не видно?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
22.07.2014, 03:23     Передача ссылки на массив в функцию #4
Не хотите читать 3 мой вариант? Ждите других кто поможет вам прочитать мой 3 вариант, и перетащить готовые уже решения в ваш проект )))))
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
22.07.2014, 04:04  [ТС]     Передача ссылки на массив в функцию #5
нет, хочу понять почему у меня не работает, тупо копи-паст не катит) в любом случае спасибо за помощь )

Добавлено через 19 минут
судя по всем вашим 3 вариантам обьявление разщмера указателя на массив происходит до мейна. в этом вся соль...
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 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;
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2014, 11:10     Передача ссылки на массив в функцию
Еще ссылки по теме:

C++ Передача указателя на массив структур в функцию и далее
Передача указателя на массив тип complex в функцию C++
Передача ссылки и указателя в функцию C++

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

Или воспользуйтесь поиском по форуму:
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
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** и т.д
Yandex
Объявления
22.07.2014, 11:10     Передача ссылки на массив в функцию
Ответ Создать тему
Опции темы

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