簡體   English   中英

使用指針C ++將值分配給二維數組

[英]Assigning value to two dimensional array with the use of pointers C++

我有一個任務說明:“您的任務是用將其變成乘法表的值填充10x10矩陣。您不能使用方括號。您不能使用索引。因此,您必須使用指針。”

輸出應如下: 10x10乘法表

那就是我最終得到的解決方案:

#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 ++,如果您的描述性足以讓我以最簡單的方式理解,那將非常好。

謝謝!

你可以做

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

    for(int i = 1; i <= 10; i++) {
        for(int j = 1; 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;
    } 
}

int[][]可以用作int**

因此矩陣可以視為int**並且*(matrix + i)matrix[i]是同一回事

理解分配是什么的關鍵是理解變量在內存中的布局。 鏈接: 數組聲明

T a[N];形式的聲明T a[N]; ,將a聲明為一個數組對象,該對象由N個連續分配的T類型的對象組成。

聲明: int matrix[10][11]意味着有11個int的10個數組。

但是,因為這也是連續的,這也可以解釋為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;
    }

通過使用++運算符,指針將移至下一個元素。

對於輸出,更好的選擇是使用基於范圍的for循環

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

那是我想出的最終解決方案:

    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;}

謝謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM