我正在編隊,我們正在看到指標。我們面臨著一個謎:
#include <stdio.h>
#include <stdlib.h>
int main()
{
short *p_var = 0;
if (p_var == NULL) {
short var = 123;
p_var = &var;
printf("ma variable= %d \n", *p_var);
}
printf("ma variable= %d \n", *p_var);
return 0;
}
如您所見,此函式的目的是顯示有關指標的一些問題,例如范圍或空錯誤。在這里,好的結果是123和0,printf但其他隊友有123和123。我們使用相同的 IDE 并使用相同的編譯器。
你知道會發生什么嗎?
uj5u.com熱心網友回復:
這段代碼沒有好的行為:第二個的行為printf是undefined。
指標設定在if塊內以指向在此范圍內定義的變數,該變數var設定為123. 第一個的行為printf是完全定義的,并且確實是 prints ma variable= 123 。
當控制離開這個塊時,變數var超出范圍,它的位置可能被用于其他目的……或者不是。
通過指標訪問此記憶體具有未定義的行為。它可能會123在某些機器上產生價值,在其他機器上產生另一個價值,0并在更奇特的架構上崩潰。行為可以從一個編譯器更改為另一個編譯器,使用不同的編譯器選項,使用不同的作業系統,甚至只是不同的時間......無法預測它,行為是未定義的。
建議您的老師引入無效指標等概念,但他們應該說此代碼的任何行為都是好的或預期的。請他們解釋這段代碼和你的經驗是一個很好的例子的未定義行為。
uj5u.com熱心網友回復:
第一個 printf 給出了正確的結果,因為您在 if 塊中宣告了一個變數 var 并使用一個指標變數來列印它的值。
此變數的范圍僅在 if 塊內。在 for 回圈之外是一個無效的指標,因為 c 中的指標用于存盤變數的地址,您沒有在 if 塊之外存盤 ant 地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408326.html
標籤:
