常见的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.