一個簡單程式的四種情況,暫時不會分析,先放著,如有大佬懇請賜教。
問題其實就是為什麼會出現這四種執行結果:
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