首页 > 解决方案 > 我将如何将其修复为不是参考数组?

问题描述

前言:是的,我知道函数定义的不一致,我正在尝试编写这个东西。

具体符合

void renderScreen(char& currentMap[100][100], int& screenX, int& screenY)

char& currentMap[100][100]创建一个引用数组。如何在不创建引用数组的情况下将基于 2D 映射(字符数组)的单独 char 变量调用到此函数中?

语境:

#include <iostream>
#define _WIN32_WINNT 0x0500 //win2000, must be before #windows.h
#include <windows.h>
#include <strsafe.h>
#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(char& currentMap[100][100], int& screenX, int& screenY) {
    int xi; int yi;

    for (xi = 0; xi < screenX; xi++) {
        for (yi = 0; yi < screenY; yi++) {
            screen += currentMap[xi][yi];
        }
        cout << screen << endl;
        screen.clear();
    }

}

.h 文件

#pragma once
//fns
void renderScreen(char& currentTile, int& screenX, int& screenY);

//vars
string screen;
bool quit = false;
int i; int j;
int screenX; int screenY;
char currentMap[100][100];
char currentTile;

标签: c++arraysfunctionreferencedeclaration

解决方案


我认为声明为引用的第二个和第三个参数声明没有任何意义

void renderScreen(char& currentMap[100][100], int& screenX, int& screenY);

因为在函数内,用作参数的原始对象在函数内没有改变。所以函数至少可以被声明为(如果忽略第一个参数的错误声明)

void renderScreen(char& 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 ( &currentMap )[100][100], size_t screenX, size_t screenY);

推荐阅读