zoukankan      html  css  js  c++  java
  • 字符数组和字符串的小细节

    1. 背景知识

    1、字符串就是一个地址。

    2. 指向字符串的指针

    2.1 代码A

    const char *a = "unix";
    char *b = "hello";
    
    pritnf("%s 
    ", a);
    a = b;
    printf("%s 
    ", a);
    
    /**---------input----------**/
    // unix
    // hello
    

    关于代码A中Line 1疑问

    • const 作用于下面那一个?
      • 指针a
      • 指针a指向对象的值

    对比代码A中input,我们可以确定,const 修饰的声明中,a的地址是可以被改变的。

    2.2 代码B

    当我们把代码A中的Line 5修改为
    *a = *b;

    编译器给出错误提示:[Error] assignment of read-only location '*a'
    中文意思是赋值给只读位置*a*a就是a指向对象的值,所以 *a = *b错误

    2.3 结论

    const char *a = "hello" 语句中const修饰的是a指针指向内存的值

    3. 字符数组

    3.1 代码C

    char a[20] = "hello world";
    char *b = "hello";
    printf("%p = %s
    ", a,a); 
    	
    a[0] = 'a';
    printf("%p = %s
    ", a,a);
    /**---------input----------**/
    // hello world
    // aello world 
    

    关于代码C中疑问

    • 数组的元素和地址是否可以更改
      • Line 1 : 字符数组可以对其元素进行更改

    把代码C中Line 4 改成
    a = ba = "hi"
    都会出现错误提示: [Error] assignment to expression with array type
    中文通俗意思:不可以赋值给具有数组类型的表达式。这里的表达式是指整个数组的首地址。

    也就是说在C语言内部 数组的首地址是不可更改的,相当于被const修饰

    3.2 总结

    数组的元素可以更改,而数组的首地址为只读

    4. 拓展

    在第二节中,讨论了const对指针对象的作用,那么有没有办法让指针本身只读?

    char *const a;
    a =  "hello";	
    printf("%p = %s
    ", a,a); 
    

    上述代码会提示 [Error] assignment of read-of 'a'
    中文意思为 错误:为只读的'a'赋值

    所以,类型描述 *const 变量名 即可让指针变量为只读。


    我愿以为博客园对makedown支持不是很好。没想到连目录都支持了。基本功能算是不错了。美中不足的代码块行数显示不了

    本文由作者原创,如需转载注明出处!
  • 相关阅读:
    HTTP方法(转)(学习基础)
    正则表达式 学习手记 111221
    原型模式 学习手记
    分布式事务 MSDTC配置
    Ibatis.Net 学习手记二 缓存
    IIS 7.0 部署MVC
    事务与分布式事务
    Ibatis+MVC 3.0 开发手记
    Ibatis.Net 学习手记一 简单的Demo
    简单工厂 学习手记
  • 原文地址:https://www.cnblogs.com/Fsiswo/p/11133211.html
Copyright © 2011-2022 走看看