题目一(*为公司2015春季校园招聘笔试题)
void GetMem( char *p )
{
p = ( char * ) malloc( 100 );
}
void Main( )
{
char *pStr= NULL;
GetMem( pStr );
strcpy( pStr, "BBB" );
printf( pStr );
}
请问运行main函数会输出什么?先思考再看答案。
答案: 程序出错。
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