關於c中陣列,修改其中,另外也改變了,求解釋下原因

時間 2022-03-13 18:05:20

1樓:

請問陣列是值型別還是引用型別?搞清這個,你立即就會明白。

int a = 8;

int b =a;

b = 1;

int是值型別的,

int a =

int b = a;

b[1] = 8;

int是引用型別的。

至於new int[2]只是宣告瞭指標,並未真正指向,如果使用b =a時,那麼指標指向了a,兩者同一託管堆中的物件,所以這種方式只是指的同一物件,與值型別不同。若想實現類似不同物件,值相同的情況下,可以參考淺表複製與深度複製的內容,實現類之間的引用型別數值複製。

2樓:匿名使用者

樓主您的詳情請檢視

引用型別 與值型別

引用型別:

引用型別 由型別的實際值引用(類似於指標)表示的資料型別。如果為某個變數分配一個引用型別,則該變數將引用(或「指向」)原始值。不建立任何副本。

引用型別包括類、介面、委託和裝箱值型別。

值型別 (value type)

一種由型別的實際值表示的資料型別。如果向一個變數分配值型別,則該變數將被賦以全新的值副本。(這與引用型別不同,在引用型別中,賦值時不建立副本。

)值型別通常建立在方法的棧幀上,而不是在垃圾**堆中。可以對值型別進行裝箱,這是一個建立相應引用型別的過程。

3樓:匿名使用者

因為有bb==aa,現在bb就是aa了,你對bb賦值,也就是對aa賦值

4樓:匿名使用者

指向同一個記憶體空間了

c#將陣列放入佇列,再修改陣列值,佇列裡面的值也跟著修改了,怎麼解決??

5樓:匿名使用者

這裡面有引用的概念,qlist.enqueue(test1); 存的可能就是 test1在記憶體中的地址,這個地址指向的就是陣列裡回面的元素,test1[0]="abc"; 這句改答的是陣列裡面元素的值,但是test1這個物件在記憶體中的地址本身沒有變。所以會出現這樣的現象

最直接的辦法

queueqlist = new queue();

string test1 = ;

string test2 = ;

qlist.enqueue(test2);

test1[0]="abc";

c# 將一個陣列賦值給另一個陣列的問題

6樓:匿名使用者

親,陣列是引用型別,你把a附給了b,那麼a和b就是指向堆記憶體中的同一個內容,排序一個當然會影響另一個

j**a中為什麼改變了複製後的陣列的值原陣列裡面的值也會被改變

7樓:在大滌山招標的波斯貓

因為陣列是一個物件

也許樓主是做了類似這樣的事

int i1 = new int[10];

int i2 = i1;

這樣的話i1和i2訪問的是記憶體中的同一段資料,所以修改一個,另一個也跟著改變了

想要不改變的話應該這樣複製

int i1 = new int[10];

int i2 = new int[10];

for(int i=0;i

兩個陣列就可以獨立操作了

但是如果是一個複合引用型別的陣列,即使用第二種方式複製,結果仍是修改一個,另一個跟著變

8樓:匿名使用者

有值型別和引用型別,複製函式是引用型別做引數

c#中呼叫一個方法後,為什麼會把引數的值改變了

9樓:busy氣壯山河

1. 引數陣列-----params(可以將相同型別,數量可變的多個引數傳給一個方法) 2. 引入:

一般,引數的數量都是由目標方法宣告所確定。然而,有時我們希望引數的數量是可變的。或許最好的方法是為方法傳一個陣列。

10樓:

引數是引用型別的話,物件的成員是可以被改變的

或者ref修飾的值型別也可以被改變

c#動態建立了多個控制元件,在另一個事件中怎麼修改某個控制元件的屬性?

11樓:匿名使用者

宣告一個全域性的控制元件陣列,在this.controls.add的同時,也將控制元件的引用賦給陣列中的元素,之後在button2_click中可以通過陣列索引器去取得控制元件然後就可以隨便操作了

12樓:匿名使用者

你可以用this.controls.find("pbx" + i.tostring(), true);去找到該控制元件。

13樓:匿名使用者

picturebox pbx = new picturebox();

pbx = this.findcontrol("pbx1") as picturebox;

然後 pbx.屬性=值 應該就可以了。

c# 陣列索引超出界限,幫我看下怎麼改? 求解釋

14樓:仙戈雅

static void main(string args)行,第列的元素", i, j);

numb[i, j]=convert.toint32(console.readline());}}

}另外,c#在定義二維陣列時,若尾部跟隨了"{}"花括號意味著你要初始化它,即定義時就進行集合初始化,此時則可以忽略陣列大小,形如下面的形式就是正確的:

int[,] numbers = new int[,] , ,  };// 正確。

15樓:匿名使用者

二維陣列定義錯誤:

int[,] numb = new int[, ] ;

這樣定義表示numb陣列裡面沒有值;

改為: int[,] numb = new int[n,m];正解;

c 指標陣列問題,C 中關於指標陣列的問題。

是錯誤的。char cchar count 宣告瞭cchar是有count個元素的陣列,每個元素都是指向char型變數的指標。但cin cchar i 卻試圖給cchar的第二個元素 指標 賦一個鍵盤值 這裡指標還沒有確定指向,是隨機的,它隨機地指向了不能寫入的地方,就要出錯。這裡應該先給指標陣列賦...

C陣列的引用做函式引數怎麼寫,c 中關於陣列作為函式引數的幾種方法

陣列名作函式引數 陣列名可以作函式的實參和形參。如 12 3456 78910 11main f int arr,int n array為實引數組名,arr為形引數組名。在學習指標變數之後就更容易理解這個問題了。陣列名就是陣列的首地址,實參向形參傳送陣列名實際上就是傳送陣列的地址,形參得到該地址後也...

C中的元素型別(關於陣列)

可以這樣實現 object arr new object 2 將object看做一個二維陣列,因為它的元素是object型別,可以儲存陣列 arr 0 new float 10 第一個元素儲存一個float陣列,其他型別同理 arr 1 new int 5 float arr 0 0 1.0f 還原...