作者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)