簡體   English   中英

用三重指針將數組作為參數

[英]Taking arrays as arguments with triple pointers

請告訴我使用單,雙或三重指針接受數組的函數之間的區別。

示例代碼:

int visit(int ***A, int i, int j, int n, int m, int size) {
     (*A)[i][j] = -1;
     size++;
     if(i-1 >= 0 && j-1 >= 0 && (*A)[i-1][j-1] == 1) {
        size += visit(A, i-1, j-1, n, m, 0);
     }
     if(i-1 >= 0 && (*A)[i-1][j] == 1) {
         size += visit(A, i-1, j, n, m, 0);
     }
     if(i-1 >= 0 && j+1 < m && (*A)[i-1][j+1] == 1) {
         size += visit(A, i-1, j+1, n, m, 0);
     }
     if(j-1 >= 0 && (*A)[i][j-1] == 1) {
         size += visit(A, i, j-1, n, m, 0);
     }
     if(j+1 < m && (*A)[i][j+1] == 1) {
         size += visit(A, i, j+1, n, m, 0);
     }
     if(i+1 < n && j-1 >= 0 && (*A)[i+1][j-1] == 1) {
         size += visit(A, i+1, j-1, n, m, 0);
     }
     if(i+1 < n && (*A)[i+1][j] == 1) {
         size += visit(A, i+1, j, n, m, 0);
     }
     if(i+1 < n && j+1 < m && (*A)[i+1][j+1] == 1) {
         size += visit(A, i+1, j+1, n, m, 0);
     }
     return size; 
}

***A是什么意思?

請告訴我使用單,雙或三重指針接受數組的函數之間的區別。

數組(例如int[] )在編譯期間將更改為( int* )...

例如,取整數int some_num = 10;

現在,當您突然想要將這些數字存儲為數組時,該怎么辦,當然是int[] some_num_array = { some_num, some_num2, some_num3 }; <- 這是最通用的方法...

如果您知道vector ,那么等效的向量將是: std::vector<int> some_num_array{ some_num, some_num2, some_num3 } ...

而且您可能已經知道向量的作用,它是一個在其中存儲值的容器 ,當然它永遠不會存儲無限值,因為它會消耗您的內存,並且會變得像內存一樣大。

您所問的int*** A可以解釋為std::vector<std::vector<std::vector<int>>> ...

如您所見,它是一個 包含向量向量 的向量 ...

然后,以同樣的方式,它也是一個 包含指針 的指針的指針 ...

引用運算符(&)用於將指針轉換為超級指針等等。在C / C ++中,引用方法允許其他成員和函數將值分配給變量( 記住!永遠分配給一個變量! )...

如果我們嘗試將上面的數字some_num轉換為int*** ,則意味着將非指針變量轉換為將其值為5的三級指針... auto A = new int**(new int*(&some_num));

因此,換句話說, int***可以稱為三維指針(數組),就像您已經看到了一個二維數組,該數組在其 (索引)內存儲列。

另一方面,三維數組在其內部( 側面 )存儲多個二維數組。

“ **** A是什么意思?*”

在這里,你可以混淆這是已知的一個術語人參考 ,並做完全相反的參考的,我們都在談論這一切的時候其實...它引用(減少[因此, 的使用期限內]所謂的指針級一對一)...

這樣, some_num = ***A; ,它將A的值存儲在some_num中

但是, ***A = some_num; ,而另一方面,不同的是,它改變任何地方的值而不是指針本身,這就是為什么的原因(const char)*不能被解除引用的分配,因為它解除引用值是恆定的性格,這是一種常量... (在函數內部或外部)

因此,最后我要說的最后一點是,使用指針是為了能夠取消引用其值(修改值,但不能修改指針)或創建一個基於內存的指針級別限制數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM