編譯器為gcc
現象一:
這三段代碼輸出結果怎么解釋?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b ;
int a ;
printf("%x\n",&a); //只輸出a的地址,本人機器上為61FE1C
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b ;
int a ;
printf("%x\n",&b); //只輸出b的地址,本人機器上也為61FE1C
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b ;
int a ;
printf("%x\t%x\n",&a,&b); //同時輸出a,b的地址,本人機器上為61FE18 61FE1C
system("pause");
return 0;
}
為什么前面兩次輸出的地址會一樣?
現象二:
這兩段代碼結果怎么解釋?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b;
int a;
printf("a = %d\n",a); //輸出a = 16
printf("b = %d\n",b); //輸出b = 0
printf("%X\n",&a); //a的地址為61FE18
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b;
int a;
printf("a = %d\n",a); //輸出a = 0
printf("b = %d\n",b); //輸出b = 16
printf("%X\n",&b); //b的地址也為61FE18
system("pause");
return 0;
}
從a,b的值交換了可以看出a,b的地址交換了?為什么a,b的地址會交換呢?
現象三:
這兩段代碼結果怎么解釋
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b = 10000;
int a ;
printf("%X\n",&b); //b的地址是 61FE1C
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b = 10000;
int a ;
printf("a = %d\n",a);
printf("%X\n",&b); //b的地址是 61FE18
system("pause");
return 0;
}
這兩次b的地址為什么變了呢?
uj5u.com熱心網友回復:
int x 這個只是申明但沒有初始化所以沒有分配地址uj5u.com熱心網友回復:
程式運行時才分配地址,你兩次運行,每次運行出現一樣地址也沒什么奇怪的,同時輸出不是不一樣嗎uj5u.com熱心網友回復:
首先,每次運行程式,地址不一定一樣的。如果間隔很短地運行兩次,都被分配在同一地址,也不奇怪。而你兩段代碼都定義了a和b,卻只有一個被使用,這種情況編譯器可能已經把另一個變量作廢了,所以不管你查看哪個變量的地址,因為只有它被使用,也就表現出相同的地址了。
另外,不能用未初始化變量的值來做什麼依據,因為它是不確定的。
uj5u.com熱心網友回復:
你給他賦值地址也是交換的。
uj5u.com熱心網友回復:
同一程式啟動的行程被分配的記憶體地址不一定相同的,你這里因為相隔比較短,可能相同的記憶體被重復利用
另,【給他賦值】這里指的是什么?你的代碼里沒有給兩個變數賦值啊,你是指以下兩段代碼嗎?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b = 10000; //這里有賦值
int a ; //這里沒有使用a,編譯優化可能直接舍棄a
printf("%X\n",&b); //b的地址是 61FE1C //所以這里相當于只有1個變數,列印的只是1個變數的地址
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b = 10000;
int a ;
printf("a = %d\n",a); //這里使用到a,編譯器不能把a舍棄,所以a的地址占用 61FE1C
printf("%X\n",&b); //b的地址是 61FE18 //所以這里b的地址是 61FE18 就是另1個變數的地址(相差4個位元組)
system("pause");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/207397.html
標籤:C語言
上一篇:求大神解答
