[英]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.