[問題] VC,變數大小沒錯記憶體位置有問題

看板C_and_CPP (C/C++)作者 (牛B)時間14年前 (2011/10/25 22:26), 編輯推噓3(302)
留言5則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 在DEV上沒錯,可是換成在VC上就有錯了 OS:XP SP3 問題(Question): /* prog10_1, 印出變數於記憶體內的位址 */ #include <stdio.h> #include <stdlib.h> int main(void) { int a,b=5; /* 宣告變數a與b,但變數a沒有設定初值 */ double c=3.14; printf("a=%4d, sizeof(a)=%d, 位址為%d\n",a,sizeof(a),&a); printf("b=%4d, sizeof(b)=%d, 位址為%d\n",b,sizeof(b),&b); printf("c=%4.2f, sizeof(c)=%d, 位址為%d\n",c,sizeof(c),&c); system("pause"); return 0; } 這是範力程式,輸出結果是 /* output-------------- a=-858993460, sizeof(a)=4 , 位址為1245024 b= 5, sizeof(b)=4 , 位址為1245012 c=3.14, sizeof(c)=8 , 位址為1244996 ---------------------*/ 記憶體位置那邊每個變數所佔的位置好像都多3倍 可是在DEV執行沒這個問題 請問是哪裡設定的問題嘛... 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.5.118

10/25 22:44, , 1F
sizeof出來的結果才是該變數實際佔有的記憶體. 記憶體位
10/25 22:44, 1F

10/25 22:44, , 2F
有init的變數跟沒init的存放區域可能會不一樣
10/25 22:44, 2F

10/25 22:44, , 3F
置是否連續是看compiler的實作, 並沒有保證這些變數一定
10/25 22:44, 3F

10/25 22:45, , 4F
會連在一起, 甚至更沒有保證一定佔有記憶體空間 :)
10/25 22:45, 4F

10/25 22:52, , 5F
%d只能印int,但是你塞int*給它,基本上是未定義行為
10/25 22:52, 5F
文章代碼(AID): #1EfiSezq (C_and_CPP)
文章代碼(AID): #1EfiSezq (C_and_CPP)