作者markoo (上行下笑阿..)
看板NCTU-STAT98G
標題0721 統算 section 1.cpp
時間Tue Jul 21 12:34:51 2009
#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)