常量, char[], const char[], char*, const char*, char* const以及const char* const的详解

Posted starchenzyme

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常量, char[], const char[], char*, const char*, char* const以及const char* const的详解相关的知识,希望对你有一定的参考价值。

注意,这里用char类型只是举了一个例子,其他的int之类的也通用。

1: 常量:

例子:

char str[] = "Hello world!";
char ch = a;
int i = 12345;

我们看等号右边的,这些就叫常量。常量在程序运行过程中不会发生改变,并且随着程序一起装入内存。

2: char[]:

例子:

char str[] = "Hello world";

str是一个字符型数组(字符串)变量。可读可写。

3: const char[]:

例子:

const char str[] = "Hello world!";

str是一个只读字符串。它的内存单元中的值不可以被改变,只能在变量分配内存的时候被初始化进去。如果这样写就是非法的:

const char str[] = "Hello world!";
str = "ypa!";//Error Example

4: char*:

例子:

char str[] = "Hello world";
char *lpstr = str;

 lpstr是一个指向字符数组(字符串)变量的指针变量。lpstr的值可读可写,也就是在不同时间它可以指向不同的的内存单元;同时,它所指向的内存单元str也可读可写。

5: const char*:

例子:

const char str[] = "Hello world!";
const char *lpstr = str;
//这样写也一样:
//char const str[] = "Hello world!";
//char const *lpstr = str;

lpstr是一个指向只读字符串的指针变量。lpstr的值可读可写,也就是在不同时间它可以指向不同的的内存单元;但是,它所指向的内存单元str只读不可写。如果这样写就是非法的:

const char str[] = "Hello world!";
const char *lpstr = str;
*lpstr = y;//Error Example

6: char* const:

例子:

char str[] = "Hello world!";
char* const lpstr = str;

lpstr是一个指向字符数组(字符串)变量的只读指针量。lpstr的值只读不可写,也就是它被初始化了时候就不能再指向其他变量了;但是,它所指向的内存单元str是可读可写的。如果这样写就是非法的:

char str1[] = "Hello world!";
char str2[] = "ypa!";
char* const lpstr = str1;
lpstr = str2;//Error Example

7: const char* const:

例子:

const char str[] = "Hello world!";
const char* const lpstr = str;

lpstr是一个指向只读字符串的只读指针量。lpstr的值只读不可写,也就是它被初始化了时候就不能再指向其他变量了;并且它所指向的内存单元str也是只读不可写的。如果这样写就是非法的:

const char str1[] = "Hello world!";
const char str2[] = "ypa!";
const char* const lpstr = str1;
*lpstr = y;//Error Expmple
lpstr = str2;//Error Example

总结:

类型 自己内存单元的属性 所指向的内存单元的属性
char[] 读/写
const char[] 只读
char* 读/写 读/写
const char* 读/写 只读
char* const 只读 读/写
const char* const 只读 只读

 

以上是关于常量, char[], const char[], char*, const char*, char* const以及const char* const的详解的主要内容,如果未能解决你的问题,请参考以下文章

const char*和char* const的区别

用常量参数定义 main (const int argc, const char * const argv[])?

const char * char const * char * const 三者的区别

为啥字符串函数有一些参数作为 const char *(指向常量字符的指针)?

const char* 和 char* const

在 Python 中实现 char const *const names[] 的最佳方法是啥