1. 程式人生 > >一個簡單程式的四種情況,暫時不會分析,先放著,如有大佬懇請賜教。

一個簡單程式的四種情況,暫時不會分析,先放著,如有大佬懇請賜教。

問題其實就是為什麼會出現這四種執行結果:

1、第二種情況為什麼會報錯?

2、第三種情況那個函式名前的星號(*)到底是什麼意思?為什麼加了星號就能返回p了?

3、第一種情況為什麼和第三種情況輸出結果完全一樣?這兩種情況的程式本質上有區別嗎?

4、第四種情況的輸出結果就完全摸不著頭腦了?

////第一種(初始)情況: //#include<stdio.h> //#include<stdlib.h> //void Try_change(int *p) //{ //    int b = 7; //    printf("Try p=%p &p=%p\n", p, &p); //    p = &b; //    printf("Try bp=%p &bp=%p\n", p, &p); //} //int main() //{ //    int *p = NULL; //    int a = 5; //    p = &a; //    printf("main p=%p &p=%p\n", p, &p); //    Try_change(p); //    printf("%d\n", *p); //    system("pause"); //    return 0; //} ////執行結果: ////main p = 010FFCD4 &p = 010FFCE0 ////Try p = 010FFCD4 &p = 010FFC00 ////Try bp = 010FFBEC &bp = 010FFC00 ////5

////第二種情況: //#include<stdio.h> //#include<stdlib.h> //void Try_change(int *p) //{ //    int b = 7; //    printf("Try p=%p &p=%p\n", p, &p); //    p = &b; //    printf("Try bp=%p &bp=%p\n", p, &p); //    return p; //} //int main() //{ //    int *p = NULL; //    int a = 5; //    p = &a; //    printf("main p=%p &p=%p\n", p, &p); //    Try_change(p); //    printf("%d\n", *p); //    system("pause"); //    return 0; //} ////執行結果: ////嚴重性    程式碼    說明    專案    檔案    行    禁止顯示狀態 ////錯誤    C2562    “Try_change” : “void”函式返回值    test    d : \users\lenovo\source\repos\test\test\test.cpp    37

////第三種情況: //#include<stdio.h> //#include<stdlib.h> //void  Try_change(int *p) //{ //    int b = 7; //    printf("Try p=%p &p=%p\n", p, &p); //    p = &b; //    printf("Try bp=%p &bp=%p\n", p, &p); //    return p; //} //int main() //{ //    int *p = NULL; //    int a = 5; //    p = &a; //    printf("main p=%p &p=%p\n", p, &p); //    Try_change(p); //    printf("%d\n", *p); //    system("pause"); //    return 0; //} ////執行結果: ////main p = 00C2F75C &p = 00C2F768 ////Try p = 00C2F75C &p = 00C2F688 ////Try bp = 00C2F674 &bp = 00C2F688 ////5

////第四種情況: //#include<stdio.h> //#include<stdlib.h> //void  * Try_change(int *p) //{ //    int b = 7; //    printf("Try p=%p &p=%p\n", p, &p); //    *p = b; //    printf("Try bp=%p &bp=%p\n", p, &p); //    return p; //} //int main() //{ //    int *p = NULL; //    int a = 5; //    p = &a; //    printf("main p=%p &p=%p\n", p, &p); //    Try_change(p); //    printf("%d\n", *p); //    system("pause"); //    return 0; //} ////執行結果: ////main p = 00CFFEB8 &p = 00CFFEC4 ////Try p = 00CFFEB8 &p = 00CFFDE4 ////Try bp = 00CFFEB8 &bp = 00CFFDE4 ////7