如何让函数修改传入的指针

问题:

 

 

void change(char *q)
{
  q++;
  q++;
  printf("%s/n",q);
}
main()
{
char *p=(char *)malloc(32);
p="Hello";
change(p);
printf("%s",p);
         getch();
}

是这样的,我想利用change(char *p)来修改 main函数里的p="Hello",
怎么才能通过调用函数使main()里的p=p+2呢?也就是要输出"llo".
还有就是定义char *p,字符串 使用之前必须要malloc吗? 还有什么好办法吗?

 

 

 

回答:

 

不要以为用指针做参数就是地址传递方式,因为你主函数中的p是指针,要想在函数中改变主函数中指针的值,应该以指针的指针的方式传递参数:
void change( char** q ) {
  ++*q;    //此处不能写成*q++,因为优先级为(! ~ ++ -- + - * (type) sizeof right to left )
  ++*q;
  printf( "%s", *q );
}

int main() {
  char* p = "Hello";
  change( &p );
  printf( "/n%s", p );
}

另外,在定义char* p字符串,在使用之前并不是必须要用malloc(),你的程序就是一个很好的例子,因为"Hello"是一个字符串常量,所有的常量(包括其它数据类型的常量),编译器会自动为它们分配存储空间,不用你来手动申请存储空间,而且你的做法也是导致内存泄漏的典型例子,当你使用char *p=(char *)malloc(32);时系统就会为你分配32个字节,并且使p指向这个存储空间,但当你p="Hello";时,p就会指向"Hello"这个存储空间,p就不再指向那个32个字节的存储空间了,这时你的程序就再也不能利用这个32个字节的存储空间了。避免内存泄漏的做法可以是:

char *p=(char *)malloc(32);
free( p );//在使p指向其它的地方之前释放掉这个多余的空间。
p="Hello";

或者:

char *p=(char *)malloc(32);
char* ch = p;//如果觉得这个空间还有用,可以把它交给别人帮你保管,这样这个空间就不会变成游魂野鬼了。
p = "Hello";

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值