啊 ,,以前我是有这种想法,,,但是只能做到,,利用指针 观看内存的变化,和分配..但是还是很 空洞..
举一个例子吧..呵呵..(主要是要到指针变量..)
#include <stdio.h>
#include <conio.h>
void main()
{
int *p;
scanf("%d\n",p); /* 此句是让用户随机输入一个数据*/
printf("%d\n",*p); /*打印出这个数据*/
printf("%d",p); /*打印出这个数据的 地址*/
getch(); /*让用户暂停一下,便于观察*/
}
Tips: 我用的是TC编译器哈,,呵呵..
用TC 最好 先在定义数据的后面 清下屏哈,,, clrscr();
运行后,,屏幕会出现三个数字..
12 表示 用户输入的数据
12 表示 显示用户输入的数据
1234 表示 该数据保存在内存中的 地址
因为,我定义的是 int,所以 在内存中一个数据要 内存要分配 两个字节,即两个地址..(还有可能有的编译器分配的字节数不一样,,忽忽,,也可以测试啊`~~~)
下面开始测试.
如果在P地址的前面在添加数据,那么P的地址要相应的后移.就可以观察到P地址的变化了.
如果添加在后面,就不能很好的观察了,因为P的地址不变.
例:
void main()
{
int *p;
printf("1"); /*随机输入数字.在P地址的前面多了两个字节(即两个地址)*/
scanf("%d\n",p);
printf("%d\n",*p);
printf("%d",p);
}
运行后屏幕将显示:
12 表示用户输入的数据
12 表示显示用户输入的数据
1236 表示P在内存的 地址
因为一个数字(int 型)占2个字节.. 所以 P的地址变成了 1236
要是输入 12的 话,, p 的地址就变成了 1238
以上的只能简单的描述,数据在内存的大致分配..建议在测试的时候 最好用数字测试...(因为打印的时候 是%d(强制性以(int 型)打印),如果是字符型的话,,那么在打印出P的地址的时候可能会有误差..)..
我用的是TC 3.0编译器,,要是其他的编译器可能 P的地址会有所不同,,但都是统一的..
呵呵,,见笑了...........