ディレクトリ
1、2次元配列の問題とint型のポインタ**
1、2次元配列の問題とint型のポインタ**
01)方法の2次元配列を定義します。
INT行列[ROWS] [COLUMNSは]; // 二次元アレイ、前記定数行と列を定義します
02)機能は、次のステートメントを追加しました:
無効 printMatrixを(int型 **番号、int型の列は、int型の列が)。
あなたは以下の方法を使用して直接呼び出す場合03)、それは間違っています。
; printMatrix(マトリックス、行、列) // そう間違ってダイレクトコール
そのため行列がint(*)[COLUMNS]タイプですが、関数はint型** printMatrixタイプ必要とされ、明らかに一致していないどちらもが、。
int型**話すから、あなたがそれを行う方法に行列の必要性を表現するためにそれを使用したい場合は、ポインタは、その後、整数ポインターを入力するのですか?そのすべての要素が行列の行を表す場合、マトリックスを表わすために使用することができる場合には、要素へのポインタであるからです。次のようにコードは次のとおりです。
1 // 生成矩阵 2 INT(** generateMatrix INT行、INT 列) 3 { 4つの INT **番号= 新しい INT * [行]。 5 のための(int型 I = 0 ; iが行を<Iは++ ){ 6つの 番号[I] = 新しい INT [列]。 7 のための(INT J = 0 ; J <カラム; J ++ ) 8 数[I] [J] = iの列+ * jは、 9 } 10 返しの数字を。 11 }
全体としてint型*。これは、各要素は配列へのポインタを表し、サイズ行のアレイを作成表します。メモリレイアウトは次のよう:
ここで番号は、ポインタへのポインタは、キーマトリックスと数字を表すために使用することができるされている新たなキーワードに割り当てられたメモリが連続的であるので、その番号[i]がポインタ変数ので、アドレス番号のアドレスから計算することができるということですメモリ領域の4バイト(32ビットマシン)を占めています。ポインタに上記の方法を使用してメモリを割り当てていない場合は、数字は本当にただのポインタ
04)printMatrix(マトリックス、行、列)テストコードの適切な使用:
1の#include <STDLIB.H> 2の#include <stdio.hの> 3の#include <iostreamの> 4 // 打印矩阵 5 ボイド printMatrix(INT **番号、INT行、INT 列){ 6 のための(int型 I = 0 ;私は、行を<; I ++は) 7 { 8 ため(INT J = 0 ; J <カラム; J ++ ) 9つ のstd :: COUT <<番号[I] [J] << " " 。 10 のstd :: coutの<<std ::てendl; 11 } 12 } 13 14 // 生成矩阵 15 INT ** generateMatrix(INT行、INT 列) 16 { 17 INT **番号= 新しい INT * [行]。 18 のために(int型 I = 0 ; iが行を<; Iは++ ){ 19の 番号[I] = 新しい INT [列]。 20 のための(int型 J = 0 ; J <列J ++ ) 21 番号[I] [J] = iの列+ * jは、 22 } 23の リターン番号。 24 } 25 INT メイン(){ 26の INT **番号= generateMatrix(4、5 )。 27 printMatrix(数字、4、5 )。 28 // 释放内存 29 のために(int型 i = 0 ; iは< 4 ; iは++ ) 30 を削除[]番号[I]を、 31の 削除数字。 32 リターン 0 ;
参考ブログ:
https://www.cnblogs.com/lpxblog/tag/C%2B%2B%E9%9D%A2%E8%AF%95%E9%A2%98/