常见的C语言基础话题

1,const char 与 char 的区别

原文参考这里: http://topic.csdn.net/t/20030326/22/1581422.html

最这两个例子: const char * c=”hahaha”;char * c =”hahaha”; 而言,CSDN上的朋友给了详细的解释:

没有区别, 但前者是安全的. 因为”"括起来的常量本身就是const char*, 不能修改, 如果通过char *引用再进行修改则会发生不可预测的错误. 用const char *才是规范的. 但为了保证向下兼容, c++允许这样做. 但这样很不明智.

char *c              = "hahaha";  // 非const指针, 非const数据
const char *c        = "hahaha";  // 非const指针, const数据, c指向的目标空间的内容不可变化.
char * const c       = "hahaha";  // const指针, 非const数据, 也就是针对指针指向不能被改变
const char * const c = "hahaha";  // const指针, const数据

const char *c; 为例他的意思是c指向的目标空间的内容不可变化. 例如定义char z=’A'; c=&z;则z的内容不可以变化.如z=’B';等一些企图改变变量z的值的做法都不行. 然而c仍然是动态的,就是它还可以指向别的空间,被赋予新的地址值, 只是被他指向的目标空间的内容不可变化,如上面的z值始终为’A',不可以更新,而一但c指向别处,则z就更新了.

2,堆和栈的区别

一个由C/C++编译的程序占用的内存分为以下几个部分:

  • 栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  • 堆区(heap)- 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
  • 全局区(静态区 static)- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
  • 文字常量区 – 常量字符串就是放在这里的,程序结束后由系统释放
  • 程序代码区 – 存放函数体的二进制代码。

3,待续

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>