一道C++考试题目

昨天监考,发现有一道C++题目挺有意思,今天就凭着记忆写了程序,发现还挺有意思,分享一下了。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

char* mem(char *a, int num)
{
 a=(char*)malloc(num * sizeof(char));
 memcpy(a,"hello",num);
 return a;
}

int main()
{
 char* a = NULL;
 mem(a, 100);
 printf("%s", a);
 free(a);
 system("pause");
 return 1;
}

这样得到的结果输出为NULL,题目要求分析原因。

传统的误区是:mem函数进行的传址操作,因此最终的结果应该是hello。

但实际上,mem中的变量a仅仅是对参数a的一个拷贝,即变量a中存储的是参数a的地址,但是进行memcpy之后,变量a存储的地址变了,但是原本参数a中存储的数据是没有改变的。因此最终的输出仍然为NULL。

其实,出题者是煞费苦心的,因为卷纸上面是没有free(a)这样一句话的,我想估计是给同学们进行提示的吧。

(呵呵,没想到自己的第一篇博客就交给了这个题目了)

你可能感兴趣的:(C/C++,c++,存储,null,system,c)