关于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为所欲为,欲仙欲死~~

发布了14 篇原创文章 · 获赞 1 · 访问量 5万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览