部分内容摘自: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 copy is performed).
在函数内部,const char *每次调用函数时,都需要在stack上分配内存,然后将数据拷贝过来,函数退出前释放。
而static const char *,会直接访问read only的数据,无需再stack上分配内存。
char * const cp : 定义一个指向字符的指针常数,即const指针
const char* p : 定义一个指向字符常数的指针
char const* p : 等同于const char* p
举个例子:
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 int main() 6 { 7 char ch[3] = {'a','b','c'}; 8 char* const cp = ch; 9 printf("char* const cp: %c ", *cp); 10 /* 11 ** cp point to a fixed address 12 ** 13 cp++; //error: increment of read-only variable ‘cp’ 14 printf("char* const cp: %c ", *cp); 15 ** 16 */ 17 18 const char ca = 'a'; 19 const char* p1 = &ca; 20 21 /* 22 ** 2. Only const char* pointer can point to a const char 23 ** 24 const char cb = 'b'; 25 char* p2 = &cb; //error: invalid conversion from ‘const char*’ to ‘char*’ 26 ** 27 **/ 28 29 /* 30 ** 3. p1 points to a const char, the char be pointed has to be const, 31 ** p1 can point to a different const char 32 */ 33 printf("const char* p1: %c ", *p1); 34 const char cb = 'b'; 35 p1 = &cb; 36 printf(" %c ", *p1); 37 return 0; 38 } 39 40 /* 41 ** Output: 42 char* const cp: 43 a 44 const char* p1: 45 a 46 b 47 ** 48 */