關於陣列的一些簡單操作

2021-06-11 23:09:35 字數 1779 閱讀 2060

小小的陣列問題,以二維陣列為例

int a[2][3]=;
陣列所有值都宣告為0;

但是如果想把陣列所以值都宣告為1的話不能像0那樣做,而要

int a[2][3]=;

如果陣列的長度和寬度不確定,要動態宣告;

int **b=new int*[n];

for(int i=0;i

這樣宣告的意思是:

先宣告乙個2維指標,並給這個指標分配n個堆;

然後每個堆都分配了長度為m空間。

用new來宣告的好處是n,m的值沒定前,陣列的大小也是未定的。

這叫做動態聯編,就是陣列在程式執行時才進行編譯。

而且sizeof(b)=4 說明b只是指向陣列的首位址

而sizeof(a)=24  說明陣列的大小已經確定了,

這就是靜態和動態陣列的區別

另外靜態宣告陣列的時候,越界訪問陣列的話,值都是0

例如   

int a[1]=; 那麼a[2]=0;

動態陣列的話,訪問到的是乙個不確定值,一般很大

》陣列的複製  分為淺複製和深複製

所謂淺複製,就是僅僅改變陣列的名字,陣列實際位址不變

一維:int a[3]=;

int*b=a;

或者

int *b=new int;b=a;

二維:(二維陣列淺複製要利用陣列指標,陣列指標和指標陣列是不同的)

int a[2][3]=;

int (*b)[3];

先宣告乙個陣列指標,這個指標指向乙個含有3個元素的堆;

b=new int[2][3];

b也是乙個堆,而且b的元素為2個

b=a;

三維: 

int a[1][2][3];

int(*b)[2][3];

b=new int[1][2][3];

b=a;

n維的陣列淺複製都可以這樣做;

像這樣淺複製陣列,一旦刪除a陣列,那麼b陣列也不存在了

所謂深複製,其實就是真正的複製。

操作很簡單,就是給陣列乙個乙個地賦值

例如:

int a[2]=;

int b[2];

for(int i=0;i<2;i++)b[i]=a[i];

既然上面說到了三維陣列,這裡附帶一下三維陣列的動態宣告

比如要宣告 

a[n][m][z];

int ***a;

a=new int**[n];

for(int i=0;i

其實根據2維和三維陣列的動態宣告,可以推出n維陣列動態宣告的辦法的

對於靜態宣告的陣列,

例如int a[10];

cout<

如果有留心的話,就會發現這2個位址是一樣的

原因是&a是乙個指向自己的指標

cout<

a+1是移動乙個陣列元素的長度

&a+1 是移動正個陣列的長度

最後會發現&a+1  和&a[10]   是一樣的

JS中的陣列(關於陣列的一些基本操作與一些騷操作)

本次筆記記錄一下個人關於陣列沒掌握好的一些知識點 arra.of用來建立單個陣列 當我們想建立陣列中只有乙個元素,且元素值為1的時候 let arr1 new array 1 console.log arr1 很顯然,列印出的卻是長度為1的空陣列 正確方法來了 let arr2 array.of 1...

DaySeven 關於樹的一些簡單操作

使用long long型別可以防止資料在和int min 或者int max進行操作時,資料溢位。使用如下面所示的 可以比較一棵二叉樹是否左右對稱 bool issymmetric treenode root bool dfs treenode p,treenode q 在c 中可以使用to str...

python 關於檔案的一些簡單操作

file1 open test.txt w 覆蓋原有內容寫入,指標處於檔案開頭 開啟乙個檔案用於讀寫。如果檔案存在,刪除重新編輯,否則新建寫入 file1.write test1 在開啟的test.txt中寫入test1內容 file1.close 關閉檔案file1,使用 open 方法一定要保證...