Как бы я исправил это, чтобы это не было массивом ссылок?

#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. Да, вы правы насчет этого, я полагаю, что немного переборщил с рефери.