关于const char *的使用方法

问题:

全局变量const char* test = NULL;
然后在函数A中要改变它

  1. void funcA()
  2. {
  3.    char test2[512];
  4.    strcpy(test2, "this is a test");
  5.    test = test2;
  6. }

但 是,我们知道,test2是在栈上分配的,上面的代码是有问题的
如果我们在堆上分配,如下

  1. void funcA()
  2. {
  3.    char* test2 = (char*)malloc(512);
  4.    strcpy(test2, "this is a test");
  5.    test = test2;
  6. }

这 样的话,需要释放test

  1. if (test)
  2. free(test);

错误如下:
invalid conversion from ‘const void*’ to ‘void*’

请问,遇到这种情况要怎么办?如果我一定要const char* test;
谢谢



解决办法:


const char *p
p指针的值(内存地址)可以改变,但是该内存地址指向的内存区域是只读。
以上如你所说,没错。

但是const char *p这个指针不需要释放。

实在你想释放这个指针指向的内存空间,请定义一个非const的指针,比方说char *q,
然后q = p,然后free(q)吧。





const char*指向的内存空间真的不能修改吗?
我的理解是:
用const char *p 指向得一块空间,不能通过p指针对内存空间进行写入。
同样一块空间,用char *q去指向它,就可以借助char *q修改其中的内容。

所以,你可能是怕其它子程序访问这块内存时修改了它的内容,那你可以在公开这块内存前先戴上一个const char *p套。

而你自己却可以享有特权,通过char *q为所欲为,欲仙欲死~~

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值