我想撰寫一個使用指標的程式,當我更改指標的值時,其他指標跟隨該指標;這是我的代碼:
int * M1 = new int(1) ;
int * M2 = new int(2) ;
int * M3 = new int(3) ;
int * M4 = new int(4) ;
int * M5 = new int(5) ;
int * M6 = new int(6) ;
int * M7 = new int(7) ;
int * M8 = new int(8) ;
int * M9 = new int(9) ;
int * M10 = new int(10) ;
M1 = M2 = M3 = M4 = M5;
M6 = M7 = M8 = M9 = M10;
*M5 = *M10; // now *M1 : *M5 is equal *M10
*M10 = 120; // this only changes *M6 : *M10 but I want *M1 : *M5 changes too
如何在不使用回圈的情況下更改整個 *M1 : *M10 ?
uj5u.com熱心網友回復:
我不認為你可以按照你要求的方式做你要求的事情。指標有點像記憶體位置的標簽,移動一個標簽不會改變任何其他標簽指向的位置。讓我們可視化開始狀態:
1 <- M1
2 <- M2
3 <- M3
4 <- M4
5 <- M5
6 <- M6
7 <- M7
8 <- M8
9 <- M9
10 <- M10
在線上M1 = M2 = M3 = M4 = M5,您將前四個指標(只是標簽)移動到 M5 指向的位置(稱為位置 5)。同樣,對于下一行,將 M6:M9 指向 M10 指向的位置(稱為位置 10)。
1 <-
2 <-
3 <-
4 <-
5 <- M1,M2,M3,M4,M5
6 <-
7 <-
8 <-
9 <-
10 <- M6,M7,M8,M9,M10
使用您的 line *M5 = *M10,您只需更改 M5 位置 5 的值。所有標簽的位置都不會改變。
1 <-
2 <-
3 <-
4 <-
10 <- M1,M2,M3,M4,M5
6 <-
7 <-
8 <-
9 <-
10 <- M6,M7,M8,M9,M10
對于位置 10,您的最后一行也是如此:
1 <-
2 <-
3 <-
4 <-
10 <- M1,M2,M3,M4,M5
6 <-
7 <-
8 <-
9 <-
120 <- M6,M7,M8,M9,M10
如果您想再次移動這些標簽,則需要單獨移動它們。它們指向一個位置,但都是各自獨立的標簽。從程式結束開始做你想做的事情的最短方法是:
M1 = M2 = M3 = M4 = M5 = M10;
1 <-
2 <-
3 <-
4 <-
10 <-
6 <-
7 <-
8 <-
9 <-
120 <- M1,M2,M3,M4,M5,M6,M7,M8,M9,M10
如果您希望它們都指向最后一個位置,將它們指向 M5 的位置,您可以通過稍微修改代碼以首先移動 M5 來做到這一點:
int * M1 = new int(1) ;
int * M2 = new int(2) ;
int * M3 = new int(3) ;
int * M4 = new int(4) ;
int * M5 = new int(5) ;
int * M6 = new int(6) ;
int * M7 = new int(7) ;
int * M8 = new int(8) ;
int * M9 = new int(9) ;
int * M10 = new int(10) ;
M5 = M10; // M5 now points to location 10
M1 = M2 = M3 = M4 = M5; // M1:M4 now point to location 10
M6 = M7 = M8 = M9 = M10; // M6:M9 now point to location 10
*M5 = *M10; // This does nothing, since they already point to the same location
*M10 = 120; // All values point to location 10, which now holds the value 120
這里的結果圖是:
1 <-
2 <-
3 <-
4 <-
5 <-
6 <-
7 <-
8 <-
9 <-
120 <- M1,M2,M3,M4,M5,M6,M7,M8,M9,M10
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/506481.html
