小小的陣列問題,以二維陣列為例
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 方法一定要保證...