• 常量, 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 只读 只读
  • 相关阅读:
    Google 推出开源博客迁移工具
    Google 的盲人科学家 T. V. RAMAN
    Sun收购Qlayer以积极推动云计算业务
    比尔盖茨:云计算再造软件边界
    一些CodeGuru的COM教程 (英文)
    机器人:人工智能与心理学的较量
    100个最古老互联网域名 最久只有23年(附名单)
    spring2 hibernate3 中包冲突问题解决
    spring2.5+struts2+hibernate+mysql
    [转].NET破解体验 ildasm.exe的使用
  • 原文地址:https://www.cnblogs.com/starchenzyme/p/12285629.html
Copyright © 2020-2023  润新知