今天遇到一個問題,即在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();
}

