看板 NCTU-STAT98G 關於我們 聯絡資訊
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int x = 1; printf ("The value of X = %d\n", x); /* 印出x的值 */ printf ("Memory Address of X = %x\n",&x); /* 印出x 的記憶體位置 將x宣告為指標常數(Pointer constant):抓記憶體位址前要加& 如果x是Pointer variable,(ex: int *x;), 抓記憶體位址前則不需要加& */ system("pause"); double y=1.0; printf("Memory Address of Y = %x\n",&y); /* 印出y的記憶體位置 */ printf("Memory Address of some variable next to Y = %x\n",&y+1); /* 印出y下一個變數宣告記憶體位址起始值 這邊可以看到印出來的值等於x的記憶體位址 y宣告為double, 所以他會佔8bytes的記憶體空間 PS1 :(x的記憶體位址) - (y的記憶體位址) = 8 bytes PS2 :記憶體宣告是由上往下遞減 ex: x先宣告y後宣告, x的記憶體位址在y的前面 PS3 :記憶體顯示從0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f為16進位*/ system("pause"); printf("Memory Address of some variable next to X = %x\n",&x+1); /* 印出x下一個變數宣告的記憶體位址起始值 這邊可以看出x宣告為int所佔的記憶體空間 */ float z[2]={1,2}; printf("Memory Address of z = %x\n",&z); printf("Memory Address of some variable next to z = %x\n",&z+1); /* 將z宣告為一個向量, 其記憶體空間為2*sizeof(float)=8的大小 所以&z+1為下一個宣告變數的記憶體未址起始值 可以算一下驗證兩者間的間隔為8 bytes */ printf("Memory Address of X[0] = %x\n",&z[0]); printf("Memory Address of X[0] = %x\n",&z[0]+1); printf("Memory Address of X[1] = %x\n",&z[1]); /* 這邊可以發現&z[0]的記憶體位址初始值就是&z的初始值 而&z[0]+1是指z[0]下一個值(也就是z[1])的記憶體位址(也就是&z[1]的位址) */ return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.7.248 ※ 編輯: markoo 來自: 140.113.7.248 (07/21 12:56)