[英]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.