我編寫了這個程序來檢查本地變量和全局變量的地址。我讀到堆棧段存儲局部變量和數據段存儲全局變量。但是當我執行這個程序時,兩個變量的地址沒有太大的區別,這意味着它們必須在同一個段中。無法理解爲什麼會這樣..這裏是代碼和輸出 -本地和全局變量的地址
#include<stdio.h>
int *chr;
void main(){
int *char1;
printf("global- %p \n local- %p",chr,char1);
chr=malloc(sizeof(int));
char1=malloc(sizeof(int));
printf("malloc_global = %p \n malloc_local = %p",chr,char1);
}
輸出 -
global- (nil)
local- (nil)
malloc_global = 0x969010
malloc_local = 0x969030
理解*任何*類型都可以。你不需要聲明指針。聲明'char foo;'並打印'printf(「%p」,&foo);''將打印'foo'的位置。 – ArjunShankar
@ArjunShankar:使用'%p'轉換說明符打印的指針應該轉換爲與'void *'兼容的類型,如果它們不在。儘管在現代系統中很少見,但不同類型的指針可能具有不同的表示形式,並且傳遞與'void *'不兼容的類型以'%p'打印時具有C標準未定義的行爲。 –
@EricPostpischil - 你是對的。我的意見最初意味着作爲對此問題的回答(與OP的「printf(」%p「)相反的早期(現已刪除)評論的補充,它建議將printf(」%p「,&chr) CHR)')。 – ArjunShankar