天天看点

分享一道牛客网有关内存的题

当参数*x=1, *y=1, *z=1时,下列不可能是函数add的返回值的(7 )?
   int add(int *x, int *y, int *z)
   {
        *x += *x;
        *y += *x;
        *z += *y;
        return *z;
     }
           

这里我给出了验证代码:

#include "StdAfx.h"
#include<stdio.h>
//在VS2010下运行通过
int add(int *x, int *y, int *z){
    *x += *x;
    *y += *x;
    *z += *y;
    return *z;
 }
 
void main()
{
 //划分三块内存区域
 int a=1,b=1,c=1;
 //注意经过一次add()之后,a,b,c的值有可能发生改变,注意要值要归1
 printf("指向同一内存区域%d\n",add(&a,&a,&a));
 a=1,b=1,c=1;
 printf("指向不同内存区域%d\n",add(&a,&b,&c));
 a=1,b=1,c=1;
 printf("x.y指向同一内存区域%d\n",add(&a,&a,&b));
 a=1,b=1,c=1;
 printf("x.z指向同一内存区域%d\n",add(&a,&c,&a));
 a=1,b=1,c=1;
 printf("y.z指向同一内存区域%d\n",add(&a,&c,&c));
 getchar();
}
           

结果:

分享一道牛客网有关内存的题

解析:

1、x!=y!=z,但指向的值都为1,此时*x+=*x后,*x=2,*y+=*x后,*y=3,*z+=*y后,z=4;

2、x=y=z相同,指向同一个1,此时x+=*x后,*x=2,*y+=*x后,*y=4,*z+=*y后,z=8;

3、x=y!=z,但指向的值都为1,此时x+=*x后,*x=2,*y+=*x后,*y=4,*z+=*y后,z=5;

4、x!=y=z,但指向的值都为1,此时x+=*x后,*x=2,*y+=*x后,*y=3,*z+=*y后,*z=6;