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

1: 常量:

例子:

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

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

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的详解的更多相关文章

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

    很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大 ...

  2. sqlserver数据库中char、varchar、text与nchar、nvarchar、ntext数据类型使用详解

    很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大 ...

  3. Java中关于注释、标识符、变量、常量、数据类型、类型转换、转移字符以及数值型的表现形式的详解

    Java文件的注意事项 在同一个Java文件中,可以定义多个类,但是被public修饰的类只能够有一个,并且此类名要与文件名一致. 在同一个类中,可以定义多个方法,但是名字叫做main的方法只能有一个 ...

  4. java乱码详解(java中byte与char的转换)

    转自:http://hi.baidu.com/%C6%F3%D2%B5%BC%D2%D4%B0/blog/item/825a4858d6248e8b810a181a.html   java byte与 ...

  5. opencv中 int main(int argc,char* argv[])详解

    opencv中  int main(int argc,char* argv[])详解 argc是命令行总的参数个数     argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数     ...

  6. 关于int main(int argc,char* argv[])详解

    平时在VS的环境下,主函数总会看到这两个参数,今天突然很想知道这两个参数的原理以及作用,因此查了下资料.真心受教了. 下面的博文是在百度空间看一位大神的,原文链接:http://hi.baidu.co ...

  7. C++ 常量类型 const 详解

    1.什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(当然,我们可以偷梁换柱进行更新:) 2.为什么引入const? const 推出的初始目的 ...

  8. C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解

    http://blog.csdn.net/gmstart/article/details/7046140 在C++的类定义里面,可以看到类似下面的定义: 01 class List { 02 priv ...

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

    文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...

随机推荐

  1. 一个低级shell简易学生信息管理系统-新增登陆注册功能

    还有bug 不修改了 小声bb一下 这玩意真的要控制版本 随手保存 本来有个超完整的版本 一开心被我rm - f 了 后续还出现了 更多的bug 仔细仔细 源码如下: record=stu.db if ...

  2. 个人作业四——Alpha测试

    个人作业四--Alpha测试 这个作业属于哪个课程 软件工程 这个作业要求在哪里 作业要求 团队名称 GP工作室 这个作业的目标 对其他小组的项目进行测试 测试人员 许佳文 学号 2017310242 ...

  3. Canny边缘检测算法(基于OpenCV的Java实现)

    目录 Canny边缘检测算法(基于OpenCV的Java实现) 绪论 Canny边缘检测算法的发展历史 Canny边缘检测算法的处理流程 用高斯滤波器平滑图像 彩色RGB图像转换为灰度图像 一维,二维 ...

  4. IIS 32位/64位 全局模式切换

    IIS7以上可以对单个应用程序池进行设置. IIS6需要用命令. 一.32位模式1.cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set ...

  5. SIFT特征匹配算法介绍

    原文路径:https://www.learnopencv.com/histogram-of-oriented-gradients/ 按语:偶得SIFT特征匹配算法原理介绍,此文章确通俗易懂,分享之! ...

  6. LeetCode-指针法

    LeetCode刷题总结-指针法 方法介绍:指针法主要使用在一组按从小到大排好序的数组中,当按照条件查找对应元素时,在数组的前后定义两个指针,当两个指针代表的元素进行运算时:若结果大于目标值,则左移右 ...

  7. Django中model的class Meta

    Class Meta 作用:使用内部类来提供一些metadata,以下列举一些常用的meta:1,abstract:如下段代码所示,将abstract设置为True后,CommonInfo无法作为一个 ...

  8. volatile梳理

    volatile 可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值. 在Java中为了加快程序的运行 ...

  9. 国外大神制作的一个很棒的matplotlib 可视化教程

    国外大神制作的一个很棒的matplotlib 可视化教程 参考:https://www.machinelearningplus.com/plots/top-50-matplotlib-visualiz ...

  10. python随机生成字符

    Python2: Unicode是一种通用的编码方式,不论是英文字母.汉字.日语还是其他文字都能够对应一个唯一的Unicode编码(序号). chr(100) # 得到整数对应的ascii码(小于25 ...