C/C++指針參數賦值問題
阿新 • • 發佈:2018-07-20
.cn logs class c++ 就是 指針 問題: 找到 解決
今天遇到一個問題,即在C/C++中,關於在函數裏對指針賦值的問題。首先可以看到如下現象:
void test(int *p) { p = NULL; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int *t , y = 10; t = &y; test(t); return a.exec(); }
這個結果令我有點吃驚,我一直以為傳遞指針,賦值完這個指針也會變的,沒想到其實指針也是一個變量,我們如果要改變它,必須找到它在內存中的地址,也就是指針的地址。也就是說,對於函數中,如果對指針的地址進行賦值,事實上是改變不了原指針的!
void test(int **p) { *p = NULL; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int *t , y = 10; t = &y; test(&t); return a.exec(); }
另外,用引用賦值也可以解決這個問題:
void test(int &p) { int n = 9; p = n; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int t , y = 10; t = y; test(t); return a.exec(); }
另外,可以修改指針指向的內容,而不是修改指針地址,也可以改變內容。
例子1:
void test(int *p) { int n = 9; *p = n; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int *t , y = 10; t = &y; test(t); return a.exec(); }
例子2:
void test(int *p) { int n = 9; *p = n; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int t , y = 10; t = y; test(&t); return a.exec(); }
C/C++指針參數賦值問題