例如 :
void foo(int *ptr) {
some code///
}
int main() {
int x = 5;
foo(&x);
}
但不是這個:
void foo(int *ptr) {
some code///
}
int main() {
int x = 5;
int *ptr = &x
foo(ptr);
}
我讀過關于這個的文章,但所有說“我們正在傳遞地址”的東西,但不是指標,我不明白為什么,請告訴我
uj5u.com熱心網友回復:
下面的代碼片段很好(合法/有效),因為變數ptr是一個指標,意味著它保存了一個 int 的地址(在這種情況下)。這正是foo其引數型別所期望的。
void foo(int *ptr) {
// some code///
}
int main() {
int x = 5;
int *ptr = &x;//ptr is a pointer to an int
foo(ptr);//this works because foo expects a pointer to an int
}
uj5u.com熱心網友回復:
你的例子(修改后)
int *ptr = &x
foo(ptr);
完全有效并且與foo(&x). 唯一的區別是您宣告了一個額外的 type 變數int*。編譯器通常會將其優化掉,因此兩者之間沒有真正的區別。
uj5u.com熱心網友回復:
指標保存變數的記憶體地址。如果一個函式接受一個指標,你實際上是在傳遞它所指向的變數的地址,所以傳遞一個指標實際上是在傳遞一個地址。這兩種情況都是合法的,做同樣的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325448.html
標籤:C
