一.可能的组合: (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实际上…
由于没有const*运算,const实际上修饰的是前面的char*,但不能在定义时转换写成 const(char *)*p,因为在定义是"()"是表示函数. 三.深入理解7种组合 (0)程序 在执行时为其开辟的空间皆在内存(RAM)中,而RAM里的内存单元是可读可写 的:指针只是用来指定或定位要操作的数据的工具,只是用来读写RAM里内存单元的工作指针 .若对指针不加任何限定,程序中一个指针可以指向RAM中的任意位置(除了系统敏感区,如操作系统内核所在区域)并对其指向的内存单元进行读和写…
在函数调用时,我们经常看见一个函数的接受参数为(const char *); 例如strlen()函数,它的定义为: size_t strlen( const char *str); 那么将形参设置为const的到底有什么好处呢?网络上经常的回答是:这样将把形参限定为常量,使得我们不能修改它.总感觉这种说法似乎是明白了,但再仔细的想下,总觉得少点什么. 在我看来,这样做的好处有2点: 第一,   保证了实参不能被修改,增加了安全性. 第二,   扩大了该函数的参数的接收范围,使得函数更具通用性.…
转:http://blog.sina.com.cn/s/blog_9ffcd5dc01014nw9.html 前面的几天一直都在复习着被实习落下的C++基础知识.今天在复习着上次创建的窗口程序时,出现了一个错误,百思不得其解.因为是同样的代码,上次的都能顺利的通过编译,这次自己新建了一个工程结果就有一个错误出现,是在调用Create()函数时,传参数出现问题如下图所示: convert parameter * from 'const char [**]' to 'LPCWSTR')" name=…
请看下面三种定义: const char *p; char const *p; char * const p; 首先看第一种,我们先看p,本着”从里往外”的原则,p是一个char *类型的变量,但char *前面有一个const修饰,即p所指向的内容为const类型不可修改,我们可以写如下程序进行实验,当试图对p指向的数组的第一个元素进行修改时,编译即可发现报错: 第二种:char const *p;  const位于char *之间,由于char *是p的类型,此种写法和const char…
1.字符串 字符串本质就是一串字符,在C++中大家想到字符串往往第一反应是std::string(后面简称string) 字符串得从C语言说起,string其实是个类,C语言是没有class的,所以C语言的字符串其实就是字符数组,也就是char [ ] ,例如: char  str[10];   //定义了一个有十个元素的数组,元素类型为字符char char  str[10] = {"hello"};  //"h e l l o \0"五个字符赋给str数组, 然…
一.char,char*,char a[], char *a[], char **s 的区别与联系 C语言中的字符串是字符数组,可以像处理普通数组一样处理字符串. 可以理解为在内存中连续存储的字符. 从实用主义而言,我们先给出结论. 我们会用到的一般有两种. · 声明一个字符串:char* a = "abcdefg": · 声明一组字符串:char* a[] = {"China","French","America",&quo…
1.const char* p: p is a pointer to const char(char const* p 一样)   意思就是不能通过p指针来修改p指向的内容(但是内容可以修改). 2.char* p      : p is a pointer to char   意思就是可通过p指针来修改p指向的内容 3.char* const p: p is a const pointer to char   意思就是p指针是一个常指针,他指向的内存地址不能变,定义的时候就得初始化   一旦给…
const char *p;       const修饰*p,所以*p是一个常量,不可修改. char* const p; const修饰p,所以指针p是一个常量,不可修改. #include<iostream> using namespace std; int main(void) { const char *p; p="I Love ShangHai"; while(p) { if(*p=='L') *p='l';//编译不能通过.error:表达式左值必须是可修改的值…
传参方法 ## 函数 extern void f2 ( const char ** ccc ); const char ch = 'X'; char * ch_ptr; const char ** ch_pptr = &ch_ptr; // This is not allowed, because... ## 传参 f2(ch_ptr) ## 如果遇到报错 f2(const_cast<const char**>(ch_ptr)); 参考 const char * vs. const c…