【データ構造】C++における1次元配列と2次元配列の手動呼び出し
1365 ワード
普段、プロジェクトをしている最中やC++で勉強している間は、配列を作るのはみんなできますが、ポインタに慣れていない人は配列の原理が不明で、メモリ呼び出しのBUGがよく発生します.
以下、人工的に配列を開くことを説明します.よく知られているように、C++では、配列の本質はポインタです(先生たちはこのように教えているはずです).しかし、皆さんはいったい配列のポインタの操作についてどのくらい知っていますか.
一、配列のポインタはconst*Tであり、直接アドレスを変更することはできない.
下
間違っています.
しかし例外は,配列が関数のパラメータとして扱われる場合である.
(1)配列名が関数パラメータとして機能する場合、関数体内では、それ自体の内包を失い、ただのポインタである.(2)残念ながら,その内包を失うとともに,その定数特性を失い,自己増加,自己減少などの操作が可能となり,修正される.
私たちがこのように使うと、
エラーは報告されず、ポインタは正常にシフトします.手動で配列を開く場合は[]の下付きで操作することもできます.つまり、newを使うともっと自由で、間違いの確率が高いのは当然です.覚えていなければjavaはこのように配列を宣言しているようです.
Newからの空間は解放されず,最後にdelete操作で解放されるべきである.
2 D配列の場合
リリースするならそれにも対応
手動でメモリを開きすぎて解放されず、メモリが不足している場合はbad_が開きます.alloc異常、catch到.
今日は多分こんなにたくさん勉強しました.の最後に常識としてsizeof()は演算子であり、決して関数ではない.
以下、人工的に配列を開くことを説明します.よく知られているように、C++では、配列の本質はポインタです(先生たちはこのように教えているはずです).しかし、皆さんはいったい配列のポインタの操作についてどのくらい知っていますか.
一、配列のポインタはconst*Tであり、直接アドレスを変更することはできない.
下
int intArray[10];
intArray++;
間違っています.
しかし例外は,配列が関数のパラメータとして扱われる場合である.
(1)配列名が関数パラメータとして機能する場合、関数体内では、それ自体の内包を失い、ただのポインタである.(2)残念ながら,その内包を失うとともに,その定数特性を失い,自己増加,自己減少などの操作が可能となり,修正される.
私たちがこのように使うと、
double *x=new double [10];
x++;
エラーは報告されず、ポインタは正常にシフトします.手動で配列を開く場合は[]の下付きで操作することもできます.つまり、newを使うともっと自由で、間違いの確率が高いのは当然です.覚えていなければjavaはこのように配列を宣言しているようです.
#include
using namespace std;
int a[10]={1,2,3,4,5,6,7,8,9,10};
int main()
{
int *c=new int[10];
c[0]=1;
c[1]=2;
c[2]=3;
cout<
Newからの空間は解放されず,最後にdelete操作で解放されるべきである.
2 D配列の場合
int **x; // , , , 。
x=new int * [10];//
for(int i=0;i<10;i++)
x[i]=new int [10];
//
リリースするならそれにも対応
for(int i=0;i<10;i++)
delete []x[i]; //
delete []x;
x=0;
手動でメモリを開きすぎて解放されず、メモリが不足している場合はbad_が開きます.alloc異常、catch到.
今日は多分こんなにたくさん勉強しました.の最後に常識としてsizeof()は演算子であり、決して関数ではない.