使用指针C ++将值赋给二维数组

时间:2018-05-10 10:40:41

标签: c++ arrays pointers matrix multidimensional-array

我有一个任务说明:"你的任务是用10x10矩阵填充将其变成乘法表的值。你不能使用括号。你不能使用索引。你必须使用指针。"

输出应该如下: 10x10 multiplication table

这就是我最终的解决方案:

#include <iostream> 
using namespace std; 
int main(void) {
int matrix[10][11] = {};

    for(int i = 0; i <= 10; i++) {
        for(int j = 0; j <= 10; j++) {
            matrix[i-1][j-1]= i*j;
        }
    }

    for(int i = 0; i < 10; i++) {
        for(int j = 0; j < 10; j++) {
        cout.width(4);
        cout << matrix[i][j]; }

        cout << endl;
    } 
}

我试着想一下如何使用指针而不是索引,但我可以找到有关如何使用二维数组指针的任何信息。

我刚刚开始学习C ++,如果你的帮助足以让我理解并以最简单的形式,那将是非常友好的。

谢谢!

2 个答案:

答案 0 :(得分:0)

理解你的任务是什么的关键是理解内存中变量的布局。链接:Array declaration

  

T a[N];形式的声明,将a声明为一个数组对象,由N个连续分配的T对象组成。

声明:int matrix[10][11]表示有10个数组,每个数组包含11个int。

但因为这也是连续的,这意味着这也可以解释为10*11 = 110连续的int。 int matrix_1D[ 110 ];

那么如何获得这些元素?

通常这是以第一个元素的地址完成的:&matrix[0][0]

结果:

const int n = 10;
const int m = 10;
int matrix[ n ][ m ];

int* matrix_ptr = &matrix[0][0];

for ( int i = 1; i <= n; ++i )
    for ( int j = 1; j <= m; ++j )
    {
        *matrix_ptr = i * j;
        ++matrix_ptr;
    }

通过使用++运算符,指针将移动到下一个元素。

对于输出,更好的选择是使用Range-based for loop

for ( const auto& row : matrix )
{
    for ( const auto& num: row )
    {
        std::cout << std::setw( 4 ) << num;
    }
    std::cout << '\n';
}

答案 1 :(得分:0)

这是我提出的最终解决方案:

    int matrix[10][10];

    // *(*(matrix + 0)+1); -----> matrix[0][1]
    // int** ----> int[][]

    for(int i = 1; i < 11; ++i) {
        for(int j = 1; j < 11; ++j)
            *(*(matrix+i-1)+j-1)=i*j;
        }

    for(int i = 0; i < 10; i++) {
        for(int j = 0; j < 10; j++) {
        cout.width(4);
        cout << matrix[i][j]; }

        cout << endl;}

谢谢大家!