簡體   English   中英

我不明白指針的行為

[英]I don't understand the behavior of a pointer

我正在編隊,我們正在看到指針。 我們面臨一個謎團:

#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;
}

如您所見,此 function 的目的是顯示有關 scope 或 null 錯誤等指針的一些問題。 在這里,好的結果是1230 ,如printf所示,但其他配合有123123 我們使用相同的 IDE 並使用相同的編譯器。

你知道會發生什么嗎?

第一個 printf 給出了正確的結果,因為您在 if 塊中聲明了一個變量 var 並使用一個指針變量來打印它的值。

此變量的 scope 僅在 if 塊內。 在 for 循環之外是一個無效指針,因為 c 中的指針用於存儲您尚未在 if 塊外存儲 ant 地址的變量的地址。

此代碼沒有好的行為:第二個printf的行為是undefined

指針在if塊內設置為指向在此 scope 中定義的變量, var設置為123 第一個printf的行為是完全定義的,並且確實打印了ma variable= 123

當控制離開這個塊時,變量var離開 scope 並且它的位置可能用於其他目的......或不。

通過指針訪問此 memory 具有未定義的行為。 它可能在某些機器上產生值123 ,在其他機器上產生另一個值,例如0 ,並在更奇特的架構上崩潰。 行為可以從一個編譯器更改為另一個編譯器,使用不同的編譯器選項,使用不同的操作系統,甚至只是不同的時間......無法預測它,行為是未定義的。

建議您的老師引入無效指針等概念,但他們應該說此代碼的任何行為都是好的預期的。 請他們解釋這段代碼和你的經驗是一個很好的例子的未定義行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM