#c #arrays #function #reference #declaration
Вопрос:
Предисловие: Да, я осознаю несоответствие в определениях функций, я пытаюсь написать эту вещь.
В частности, в соответствии
void renderScreen(charamp; currentMap[100][100], intamp; screenX, intamp; screenY)
charamp; currentMap[100][100]
Создает массив ссылок. Как бы я вызвал отдельную переменную char на основе 2D-карты (массив символов) в эту функцию без создания массива ссылок?
Контекст:
#include lt;iostreamgt; #define _WIN32_WINNT 0x0500 //win2000, must be before #windows.h #include lt;windows.hgt; #include lt;strsafe.hgt; #include "declarations.h" using namespace std; int main(int screenX, int screenY) { SetConsoleDisplayMode(GetStdHandle(STD_OUTPUT_HANDLE), CONSOLE_FULLSCREEN_MODE, 0); while (!quit) { } return 0; } void renderScreen(charamp; currentMap[100][100], intamp; screenX, intamp; screenY) { int xi; int yi; for (xi = 0; xi lt; screenX; xi ) { for (yi = 0; yi lt; screenY; yi ) { screen = currentMap[xi][yi]; } cout lt;lt; screen lt;lt; endl; screen.clear(); } }
файл .h
#pragma once //fns void renderScreen(charamp; currentTile, intamp; screenX, intamp; screenY); //vars string screen; bool quit = false; int i; int j; int screenX; int screenY; char currentMap[100][100]; char currentTile;
Комментарии:
1. Почему бы не обернуть данные в структуру? Например, карта структуры? затем вы можете передать ссылку на это, чтобы она имела четкое имя и тип по всему вашему коду. (и, вероятно, добавьте также некоторые полезные методы).
2. Я мог бы, но массив требует проектирования структуры 2D-карты. Структура сделала бы построение и интерпретацию этого немного сложнее.
3. @PepijnKramer дает правильное решение, но, синтаксически,
char (amp;currentMap)[100][100]
является ссылкой на массив массивовchar
.4. О, хорошо, я понял тебя, так что просто «символ и текущая карта» будет правильным?
Ответ №1:
Я не вижу никакого смысла во втором и третьем объявлениях параметров, объявленных в качестве ссылок
void renderScreen(charamp; currentMap[100][100], intamp; screenX, intamp; screenY);
потому что внутри функции исходные объекты, используемые в качестве аргументов, не изменяются внутри функции. Таким образом, функция может быть объявлена, по крайней мере, так (если игнорировать неправильное объявление первого параметра)
void renderScreen(charamp; currentMap[100][100], size_t screenX, size_t screenY);
Также нет большого смысла передавать массив по ссылке.
Функция может быть объявлена следующим образом
void renderScreen(const char ( *currentMap )[100], size_t screenX, size_t screenY);
Если передать массив по ссылке, то объявление функции может выглядеть так
void renderScreen(const char ( amp;currentMap )[100][100], size_t screenX, size_t screenY);
Комментарии:
1. Да, вы правы насчет этого, я полагаю, что немного переборщил с рефери.