char a = 'w'; char b = 'q'; const char* p = &a; p = &b; printf("%c",p[0]); 如上一段代码,最终代码输出q.不是有const修饰嘛?为什么仍然可以改变哪? 指针存在的价值在于让我们修改.如一下代码:会报一个警告deprecated conversion from string constant to 'char*' [-Wwrite-strings] char *msg; msg = "h…
我之前也是以为我对const char *ptr 这种形式的写法是掌握了的,真的,不就是说一个指针是不可改变的吗? 那么问题就来了,到底是ptr指针本身不能改变,还是ptr执行的值不能改变呢? 从网上的资料上看,有如下的解释: Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:  把一个声明从右向左读. char  * const cp; ( * 读成 pointer to )  cp is a const pointer to char ---…
这是我在知乎回答的一个问题. 这个问题是C中的一个深坑,首先说结论: char ** 和 const char ** 是两个不相容(incompatible)的类型,能够理解为不能直接赋值 在C11的6.5.2.2 Function calls中有例如以下内容 Each argument shall have a type such that its value may be assigned to an object with the unqualified version of the ty…
Qstring str = "helloworld"; char *s; QByteArray ba = str.toLatin1(); s = ba.data(); toLatin1.toLocal8Bit都是QString转QByteArray的方法,Latin1代表ASCII,Local8Bit代表unicode. const char* 指向字符常量的指针 const char * ss= "xxxxxx";    // 这个表示的是指针指向的内容不可修改c…
部分内容摘自:https://blog.csdn.net/ranhui_xia/article/details/32696669 The version with const char * will copy data from a read-only location to a variable on the stack. The version with static const char * references the data in the read-only location (no…
一.char,char*,char a[], char *a[], char **s 的区别与联系 C语言中的字符串是字符数组,可以像处理普通数组一样处理字符串. 可以理解为在内存中连续存储的字符. 从实用主义而言,我们先给出结论. 我们会用到的一般有两种. · 声明一个字符串:char* a = "abcdefg": · 声明一组字符串:char* a[] = {"China","French","America",&quo…
恩,有的编译器初始化时候会产生这样的参数 argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名 1. 几种C++ 常见的参数种类 int main(void); int main(); int main(int argc, char **argv);   //等价于int main(int argc, char *argv[]),是否等价呢?是不是前一个可以表示任意长度的任意个数组,后一个只是定长的任意个数的数组?见下面 int main(int argc, c…
在函数调用时,我们经常看见一个函数的接受参数为(const char *); 例如strlen()函数,它的定义为: size_t strlen( const char *str); 那么将形参设置为const的到底有什么好处呢?网络上经常的回答是:这样将把形参限定为常量,使得我们不能修改它.总感觉这种说法似乎是明白了,但再仔细的想下,总觉得少点什么. 在我看来,这样做的好处有2点: 第一,   保证了实参不能被修改,增加了安全性. 第二,   扩大了该函数的参数的接收范围,使得函数更具通用性.…
在project中,我们也有非常多时候用到string与char*之间的转换,这里有个一我们之前提到的函数 c_str(),看看这个原型: const char *c_str(); c_str()函数返回一个指向正规C字符串的指针, 内容与本string串同样. 这就看到了吧,返回值是const char*,这里须要注意一下. 1 string转const char* 当然是用到上面所述的方法c_str(): string s1 = "abcdeg"; const char *k =…
今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错.如下::不能将参数1从“const char []”转换为“LPCTSTR” 其解决方案就是, 在项目属性里面找到项目默认值下面的字符集, 将其换为:使用多字节字符集就ok了.原因: typedef   LPCTSTR    LPTSTR ; #ifndef   _UNICODE      typedef   TCHAR   char;  #else      typedef   TCHAR  …