C/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();
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM