大家都知道,每一个变量都有自己的存储空间。而地址就是用来唯一地标识存储空间。
这样就很容易让我们联想到:可以直接通过地址来代替变量,来参加程序的运算。
也就是说,我们在程序运算中可以不用变量,而直接对地址进行操作。
说了这么多,大家可能还不明白,我到底是什么意思。下面就举几个例子来说明。
例一:
#i nclude<stdio.h>
int main(void)
{
scanf("%d",(int*)0x0100);
printf("%d",*((int*)0x0100));
这样就很容易让我们联想到:可以直接通过地址来代替变量,来参加程序的运算。
也就是说,我们在程序运算中可以不用变量,而直接对地址进行操作。
说了这么多,大家可能还不明白,我到底是什么意思。下面就举几个例子来说明。
例一:
#i nclude<stdio.h>
int main(void)
{
scanf("%d",(int*)0x0100);
printf("%d",*((int*)0x0100));
}
由上例可知,0x0100一个存储空间地址.我们通过int*强制类型转换,
将0x0100的类型转换成int*型.在scanf()函数执行时,将从标准输入设备中输入的
整型值放在以0x0100为首址的空间中.而在printf()函数执行时,*((int*)0x0100)的作用
就是在0x0100为首址的空间中取出一个整型数,然后打印在标准输出设备上.
以上这个例子模拟有变量例子:
#i nclude<stdio.h>
int main(void)
{
int var;/*假设变量的存储空间的首址为0x0100*/
scanf("%d",&var);/*&var就是取var的首址,相当于scanf("%d",0x0100);*/
printf("%d",var);/* *((int*)0x0100)就是var的值.*/
}