多维阵列C

Multidimensional arrays c++

本文关键字:阵列      更新时间:2023-10-16

我是编程的完整初学者,我从C 开始。我现在在数组中,我正在尝试创建一个简单的十次表。我成功地使用了以下代码,但是我持怀疑态度,因为没有方括号,我做了正确的事情:

#include <iostream>
using namespace std;
int main() {
    int product;
    for(int i = 1; i < 11; ++i) {
        for(int j = 1; j < 11; ++j) {
            product = i*j;
            cout << product << "t" << flush;
        }
        cout << endl;
    }
    return 0;
}

弄乱了一点点,我想到了以下内容:

#include <iostream>
using namespace std;
int main() {
    int row = 11;
    int col = 11;
    int table[row][col];
    for(row = 1; row < 11; ++row) {
        for(col = 1; col < 11; ++col) {
            table[row][col] = row*col;
            cout << table[row][col] << "t" << flush;
        }
        cout << endl;
    }

    return 0;
}

都给出所需的输出,我的问题是为什么?我也很想知道第一个是否真的是数组,如果不是的话?关于我的基本代码写作的任何建议也将不胜感激。

第一个示例不使用数组。您正在打印10倍表,但您没有将该信息存储在程序中。这意味着在循环后,程序将不记得表的样子。

在第二个示例中,变量table是多维数组。外观之后,您可以调用cout << table[4][6] << endl;,并且将打印24,而无需重新计算4*6是什么。这是因为您将信息保存在多维数组中。

(如上所述,编程中的数组从0开始,这意味着您应该使循环 for(row = 0; row <= 10; ++row) {。这对数组中的第一个插槽不会被浪费。

也提到了评论,"向量"很好,但是如果您学习编程,则应该了解数组的工作原理,我建议不要进入矢量,直到您了解数组的基本知识为止(

都给出所需的输出,我的问题是为什么?

因为在两种情况下您都打印相同的值。

在第一种情况下,您将值保存在变量

 product = i*j;

并打印变量

 cout << product << "t" << flush;

在第二种情况下,您保存相同的值(row具有与i相同的值,col的值与j相同的值;因此row * col在变量

中具有相同的值与i * j相同的值(
table[row][col] = row*col;

(这次是一个数组中的变量,取决于rowcol(,您打印相同的变量

cout << table[row][col] << "t" << flush;

我也很好奇知道第一个是否真的是数组,如果不是的话?

您是说product

否:product是一个简单的整数变量。

product = i*j;

的每次迭代中更改值的变量

这是第二个示例中的table变量是数组。或更好的是一系列数组。

区别在于,在Double的末尾,product维护仅在table维护 ALL 时,最后计算出的产品的值。

关于我的基本代码写作的任何建议也将不胜感激。

首先,正如某些程序员家伙所解释的那样,代码

int row = 11;
int col = 11;
int table[row][col];

不是正确的C ,因为您不能为数组尺寸使用非常数值。

您可以直接使用11

int table[11][11];

或者您可以将rowcol定义为常量

int const row = 11;
int const col = 11;
int table[row][col];

或更好(从C 11开始(为constexpr常数

constexpr int row { 11 };
constexpr int col { 11 };
int table[row][col];

第二:恕我直言,最好避免(在可能的情况下(using namespace std;但要阐明名称空间;所以

std::cout << table[row][col] << "t" << std::flush;

这避免使用其他库时名称碰撞的风险。