常量, 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 只读 只读

原文地址:https://www.cnblogs.com/starchenzyme/p/12285629.html

时间: 2024-10-07 02:49:33

常量, char[], const char[], char*, const char*, char* const以及const char* const的详解的相关文章

深入char、varchar、text和nchar、nvarchar、ntext的区别详解

很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大手一挥一把人民币就从他手里溜走了,其实我想不管是做人也好,做开发也好,细节的把握直接决定很多东西.当然还有一部分人是根本就没弄清楚他们的区别,也就随便选一个.在这里我想对他们做个简单的分析,当然如果有不对的地方希望大家指教. 1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比

【转载】cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解

cocos2d-x中的字符串: <1>:使用 const char* 和 std::string const char* 是C风格的字符串  ,std::string 是C++风格的字符串,它封装了 const char * 初始化 std::string 对象: std::string name = "tony"; std:: string name = std::string("Micheal"); std::string 指针类型: std::st

【转】C++ 常量类型 const 详解

文章转自:http://www.cnblogs.com/daocaoren/archive/2011/07/14/2106278.html 1.什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(当然,我们可以偷梁换柱进行更新:) 2.为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点. 3.cons有什么主要的作用?(1)可以定义const常量,具有不可变性. 例如: const in

const 详解

? 简单分类: 常变量        const 类型 变量名  或者   类型 const  变量名 常引用        const 类型& 引用名  或者  类型 const & 引用名 常对象        const 类名     对象名  或者  类名 const     对象名 常数组        const 类型     数组名   或者  类型  const     数组名 常成员函数    类名::fun(形参) const 常指针        const 类型*指

详解C和C++中的const关键字

在讲下面的内容之前,要先看看这篇文章const.static变量的存储位置 一.C中的const 作用:(1)可以定义const常量,具有不可变性. (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患. (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改. 同宏定义一样,可以做到不变则已,一变都变! (4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. 还是上面的例子,如果在函数体内修改了i,编译器就会报错: (5) 可以节省空间,避免不必要的内存

C++中const关键字详解

1.什么是const? const意味着是常量类型,被const修饰的变量或对象是不能被修改和更新的,当然在某些情况下,我们可以偷梁换柱的改变它. 2.为什么要引入const? 最初的目的是为了取代预编译指令:define  MAX  (1024)  ,显然这样的宏定义常量是C语言中继承而来的,C++意识到这种宏替换会存在边际效应,因此希望const能替代它 3.const有什么作用? (1)可以定义const常量,具有不可变性. 例如: const int Max=100; int Array

(转) C/C++中const关键字详解

文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量:  const 类型说明符 变量名 常引用:  const 类型说明符 &引用名 常对象:  类名 const 对象名 常成员函

[C/C++] extern关键字详解以及与static、const区别

extern用法详解: 1. 声明外部实体 声明外部全局变量或对象,一般用于头文件中,表示在其它编译单元内定义的变量,链接时进行外部链接,如: extern int ivalue; 此时的extern是必须的,省略了extern编译器将视为定义而不是声明,一般地在源代码中定义变量并进行初始化,在头文件中使用extern声明变量. 类似地用于声明外部全局函数,表示该函数在其它编译单元中定义,如: extern void func( void ); 此时的extern可以省略. 2. 声明函数的编译

const 用法详解

const用法详解 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j;   //非法,导致编译错误 j=i;   //合法 2. 必须初始化 const int i=5;    //合法 const int j;      //非法,导致编译错误 3. 在另一连接文件中引用co