题目一(*为公司2015春季校园招聘笔试题)

void GetMem( char  *p )  

{

       p = ( char * ) malloc( 100 );

}

void Main( )

{

       char *pStr= NULL;

       GetMem( pStr );

       strcpy( pStr, "BBB" );

       printf( pStr );

}

请问运行main函数会输出什么?先思考再看答案。

编程真题练习_java


答案:   程序出错。

1. 函数的参数传递,并不会直接传递参数本身的内存,而是会先拷贝一份参数,然后把拷贝的内存传递过去。

2. 假设char *pStr= NULL;申请的内存为A,GetMem( pStr );传递过去的参数pStr则为A的拷贝内存B。A和B是两个不同的内存空间。

3. p = ( char * ) malloc( 100 );申请的内存的地址,保存到B。strcpy( pStr, "BBB" );试图把常量"BBB" 拷贝到pStr, 但是指针pStr没有申请内存。

4. 因此出错。

https://mp.weixin.qq.com/s/9EJPVGMqB-D8GQLjn4wNOw