C/C++_地址,存储区

来源:互联网 发布:python-kafka-logging 编辑:程序博客网 时间:2024/06/05 23:57

感觉如果对地址和存储区的联系与区别深入理解的话,在很多问题上都会事半功倍。
存储区:计算机中存放数据的“房间”;
地址:存储区的房间号;
*每个存储区都有一个唯一的地址;
举三两个例子:
例一:

void fun(int x,int y){    int tmp = x;    x = y;    y = tmp;    printf("%d %d\n",x,y);    return;}int main(){    int a = 4,b = 8;    fun(a,b);    printf("%d %d\n",a,b);}

例子二:

void fun(int *p_x,int *p_y){    int *tmp = *p_x;    *p_x = *p_y;    *p_y = *tmp;    printf("%d %d\n",*p_x,*p_y);    return;}int main(){    int a = 4,b = 8;    fun(&a,&b);    printf("%d %d\n",a,b);}

第一个例子的结果应该是:8 4和4 8。原因在于计算机给函数中的形参分配了新的存储区(房间),当实参进入函数时,计算机只是将其中的内容复制到新房间中,我们在新房间的操作当然不会影响到原来的房间;
第二个例子的结果应该是:8 4和8 4。为什么呢,因为该函数的形参是指针,指针里面的东西是地址(房间号),虽然计算机也开辟了新房间,但这个房间是专门用来放房间号的,而我们知道,每一个房间号都与一个房间唯一对应,所以,当我们对房间号进行操作时,自然就会影响到对应的房间;

0 0
原创粉丝点击