在使用delete刪除陣列array時,有時看到還補充array 0是為了什麼

2022-12-03 07:56:28 字數 5653 閱讀 6806

1樓:匿名使用者

delete array;

array=0;

正如你所理解array=0; 這一句不是必須的,就是說當你呼叫了delete 之後, array所佔用記憶體已經被釋放;那麼為什麼還要加上一句array=0呢?

這是因為, delete array; 只是將array所分配記憶體釋放掉, 而並不置array為0, 而是置array一個隨機的值,即所謂的野指標. 如果在程式中 你能保證執行完delete 之後不再引用array( 比如在解構函式中), 那麼array=0就沒有什麼必要了。

如果在其它函式中執行的delete array, 那麼這個時候執行array=0; 就很有必要了。正如前所述,delete之後, array 是一個不可預知的值,即有可能指向一塊其它記憶體(可能是系統非常重要的記憶體塊),這樣如果你在程式中再次引用array ,不僅自己程式本身崩潰, 而且對系統本身也可能受影響。如果你新增了語句:

array=0; 雖然程式本身會異常退出(因為array是空指標了), 卻不會對系統本身影響。

基於以上兩點,在delete一個物件之後, 良好的習慣是加上: array=0

希望這樣的解釋能夠幫到你!

2樓:

array=0;等同於array=null;

這麼做的目的在於將空指標清0,防止懸掛的野指標存在

比如你new了一個指標,系統分配給該指標地址為0xffff,那麼你delete了以後,該空間已經被系統**,但是指標仍然指向0xffff這個地方,所以為安全起見,將其賦值為null,是一個好的程式設計師的必要措施

3樓:

array=0實際上是將array所對應的指標賦值成null。delete是將array所對應的空間釋放,但是這個指標仍然存在

4樓:匿名使用者

delete array,這樣寫,array肯定是個指標,指向一個陣列型別。

array=0的意思和array=null一樣,表示array現在是個空指標了。

js裡面刪除陣列元素的問題

5樓:大雁一向北飛

首先陣列建立和初始化的格式不對

因為js是弱語言,對格式要求不是很高,所以對於賦值時"new array"可以省略,直接用

var arrayobj =[[element0[, element1[, ...[, elementn]]]])]

例如var arrayobj =[1,2,3];var arrayobj =["hello","你","好"];

按你目前的格式如果放的是數字,var arr="1,2,3";這時arr裡其實放了五個元素,逗號也算進去了,所以如果格式錯了,js雖然不會報錯,但這是以不是你想要的結果,正確的應該賦值應該是

var arrayobj =[1,2,3]或者var arrayobj =new array(1,2,3);或者var arrayobj =new array();

arrayobj[0]=1;arrayobj[1]=2;arrayobj[2]=3;

還有刪除陣列指定下標的元素,不能直接用delete arr[i]吧

可以參考以下格式進行建立、初始化和刪除

陣列的建立

var arrayobj = new array(); //建立一個陣列

var arrayobj = new array([size]); //建立一個陣列並指定長度,注意不是上限,是長度

var arrayobj = new array([element0[, element1[, ...[, elementn]]]]); 建立一個陣列並賦值

刪除元素

array.pop();//刪除最後一個元素,並返回該元素

array.shift();//刪除第一個元素,陣列元素位置自動前移,返回被刪除的元素

array.splice(start,delcount);//從start的位置開始向後刪除delcount個元素

6樓:

因為你這根本不是陣列

7樓:銀祭

這個很簡單啊,刪除一次下標重新計算,你可以在刪除一次的時候,for迴圈刪除下一次的時候i-1就可以了。

希望對你能有所幫助。

如何刪除js裡array陣列的任意行

8樓:匿名使用者

用 splice ( array.prototype.splice ) 方法。splice 方法修改陣列內容,刪除對應項,新增新的項。

array.splice( start ); // 從第 start 項開始刪除後面所有項

array.splice( start, deletecount ); // 從第start項開始,刪除後面deletecount 數量的項

array.splice( start, deletecount, item1, item2 ... ); // 從第start項開始,刪除後面deletecount數量的向,並用 item1, item2 ...

替換。

對於你的需求,例子如下:

var arr = [ 0, 1, 2, 3, 4, 5, 6 ];

arr.splice( 3, 1 ); // 刪除陣列第三項

console.log( arr ); // output [ 0, 1, 2, 4, 5, 6 ]

9樓:

array.prototype.splice()三個引數:

第一個是 陣列的開始位置

第二個是 陣列的長度

第三個是 要替換的內容

10樓:匿名使用者

插入 刪除 好像只能操作首尾吧

c++中用delete釋放掉一個陣列元素的空間相當於刪除該元素嗎 10

11樓:種燒餅的怪叔叔

1、delete不能用於釋放陣列,只能用於指標,並且指標所指的儲存空間是由new申請的。也就是說一個new對應一個delete。

2、例項:

int *p,a;

int b[5];

p=&a;delete p;//非法

p=new int [5];delete p;//合法p=b;delete b;//非法

3、delete之後,只是把指標所指的空間交回給系統,但是指標依然存在。

12樓:

你要這麼理解

//a自身在作用域外被釋放

13樓:冰血無雙

如果陣列中存放的 是 new出來的指標 需先遍歷陣列 delete每一個元素 然後在清空陣列

14樓:匿名使用者

是的,但是隻能刪除通過new產生的陣列。直接寫成delete a就可以了(假設陣列名是a)

15樓:

不是那樣的,他知識釋放,並沒有從這個記憶體空間刪除。

16樓:匿名使用者

釋放一次,可以清出來記憶體,比如你要這麼理解

new定義就相當於餐廳的包場,可能客人(陣列元素)坐不滿,所以在使用完之後解除包場(釋放記憶體),跟客人(陣列元素)在不在場沒關係。

js刪除陣列中的元素delete和splice的區別

17樓:珞硃砂

splice刪除後將返回一個新陣列,包含被刪除的元素, delete則返回布林值。splice刪除元素的同時會縮短原陣列長度,delete只是刪除元素,並不會修改陣列長度。splice可以批量刪除多個連續的元素,delete只能逐一刪除。

方法一:delete 刪除陣列,delete textarr[1]  結果為: [ "a",undefined,"c","d"]  ,只是被刪除的元素變成了 undefined 其他的元素的鍵值還是不變。

方法二:aplice 刪除陣列,splice(index,len,[item])    註釋:該方法會改變原始陣列。

index:陣列開始下標        len: 替換/刪除的長度       item:

替換的值,刪除操作的話 item為空。textarr.splice(1,1);  結果為:

["a","c","d"] 直接刪除了陣列 改變了陣列的值。

陣列物件splice方法:arr.splice(1,1);這種方式陣列長度相應改變,但是原來的陣列索引也相應改變,splice引數中第一個1,是刪除的起始索引(從0算起),在此是陣列第二個元素第二個1,是刪除元素的個數,在此只刪除一個元素,即'b';此時遍歷陣列元素可以用普通遍歷陣列的方式,比如for,因為刪除的元素在陣列中並不保留。

18樓:黑馬程式設計師

1、delete方法:delete arr[1]這種方式陣列長度不變,此時arr[1]變為undefined了,但是也有好處原來陣列的索引也保持不變,此時要遍歷陣列元素可以才用

2、陣列物件splice方法:arr.splice(1,1);

這種方式陣列長度相應改變,但是原來的陣列索引也相應改變splice引數中第一個1,是刪除的起始索引(從0算起),在此是陣列第二個元素

第二個1,是刪除元素的個數,在此只刪除一個元素,即'b';

此時遍歷陣列元素可以用普通遍歷陣列的方式,比如for,因為刪除的元素在

陣列中並不保留。

19樓:好程式設計師

delete和splice都可以刪除陣列中的元素,但是有些區別的,我舉具體的例子給你看,你看後就明白了。

例如有一個陣列是 :var textarr = ['a','b','c','d'];

這時我想刪除這個陣列中的b元素:

方法一:delete 刪除陣列

delete textarr[1] 結果為: [ "a",undefined,"c","d"]

只是被刪除的元素變成了 undefined 其他的元素的鍵值還是不變。

方法二:aplice 刪除陣列

splice(index,len,[item]) 註釋:該方法會改變原始陣列。

index:陣列開始下標 len: 替換/刪除的長度 item:替換的值,刪除操作的話 item為空

textarr.splice(1,1); 結果為: [ "a","c","d"] 直接刪除了陣列 改變了陣列的值。

j**ascript中如何刪除陣列中指定元素後形成新的陣列

20樓:霧中天茶葉

var sourcearray = [1,2,0,0,0,0,6];//原陣列抄物件

21樓:雨月藍

window.onload = function ()

}for (var i = 0; i < arr.length; i++)}

22樓:匿名使用者

定義和用法

splice() 方法向/從陣列中新增/刪除專案,然後返回被刪除的專案。

註釋:該方

回法答會改變原始陣列。

語法arrayobject.splice(index,howmany,item1,.....,itemx)

具體參考

編一對已知陣列a刪除陣列中某個元素的程式

private sub command1 click dim a as variant a array 1,6,8,3,5,9,10,2,7,4 for i 0 to ubound a if a i 10 then for j i to ubound a 1a j a j 1 next j a j ...

幫忙除錯C語言程式,刪除陣列中的元素(函式呼叫),3Q

如果你只是刪掉為k的值,然後輸入的話,只要一個for迴圈就夠了,把不等於k的值直接輸出就行,不用再存入陣列裡了,如 include void main else printf d x i printf n include int count 9 main int flag int i int del...

C語言中 二維陣列與三維陣列在使用過程中主要起什麼作用?它表

實際上是資料的一種組織方式,你可以想象成 二維陣列 行x列的長方形 三位陣列 長x寬x高 的長方體 在c語言中,陣列的意義,就是讓陣列的名字可以當作指標來使用,這樣就能很方便的定位資料。比如你有一個陣列arry 300 300 300 那麼他能儲存300 300 300 27000000個資料,如果...