心之镇

~宁以致远~
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2011年4月8日

摘要: 一、可能的组合: (1)const char*p (2)char const*p (3)char *const p (4)const char **p (5)char const**p (6)char *const *p (7)char **const p 当然还有在(5)、(6)、(7)中再插入一个const的若干情况,不过分析了以上7中,其他的就可类推了!二、理解助记法宝: 1。关键看const 修饰谁。 2。由于没有const *的运算,若出现const*的形式,则const实际上是修饰前面的。 比如:char const*p,由于没有const*运算,则const实际上是修饰前面的ch 阅读全文

posted @ 2011-04-08 23:32 心之镇 阅读(655) 评论(0) 推荐(0) 编辑

摘要: 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(heap):由malloc,new等分配的空间的地址,地址由低向高增长(程序员释放)。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 栈(stack):是自动分配变量,以及函数调用所使用的一些空间(所谓的局部变量),地址由高向低减少; 3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初. 阅读全文

posted @ 2011-04-08 23:25 心之镇 阅读(2702) 评论(0) 推荐(0) 编辑

摘要: Linux 环境下当GCC版本比较高时,编译代码可能出现的问题问题是这样产生的,先看这个函数原型:void someFunc(char *someStr);再看这个函数调用:someFunc("I'm a string!");把这两个东西组合起来,用最新的g++编译一下就会得到标题中的警告。为什么呢?原来char *背后的含义是:给我个字符串,我要修改它。而理论上,我们传给函数的字面常量是没法被修改的。所以说,比较和理的办法是把参数类型修改为const char *。这个类型说背后的含义是:给我个字符串,我只要读取它。很自然的延伸一下。 如果我既要传字面常量又要传字 阅读全文

posted @ 2011-04-08 20:38 心之镇 阅读(1593) 评论(0) 推荐(0) 编辑