指针地址的修改
看到下面这个改错题:
void GetMemory( char *p ){ p = (char *) malloc( 100 );}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, "hello world" );
printf( str );
}
没反应,不知道是哪里有问题,怀疑是GetMemory函数可能有问题。在网上查资料,果然答案是试题中传入GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值。对于这句话没怎么理解,因为第一反应与自己脑子里的概念矛盾了,编程中总是通过传入指针或是引用来在函数内部对外部变量进行修改计算,为什么这里要如此讲呢?所以又查了下资料,原来是这样的。当你想修改指针所指向的值的时候,那么可以通过传指针进行;但是另一方面,当你想修改指针的地址的时候,例如分配一段地址区域,那么就需要传入指针的引用或者指针的指针。这两点体现了指针语言的灵活。