zoukankan      html  css  js  c++  java
  • char *s1和char s2[]的区别

    首先附上阿里在线笔试的一道题目:

    对于下面的代码,说法正确的是____。

    char* s1 = "Hello world";

    char s2[] = "Hello world";

    s1[2] = 'E';     // 1

    s2[2] = 'E';     // 2

    *(s1 + 2) = 'E';  // 3

    *(s2 + 2) = 'E';  // 4

    · 语句24是非法的

    · 语句34是非法的

    · 语句13是非法的

    · 仅语句1是非法的

    · 仅语句2是非法的

    · 语句14都是合法的

    上面的题我们选择第三项。
    下面我们来详细分析一下。首先这两者有很大区别。
    char *s1="Hello world"这个是一个字符串常量,你可以像一个字符数组一样使用它,但是你不能更改这个字符串的值,比如 s1[2]='E'这样不合法。
    char s2[]="Hello world";是一个字符串变量,可以被修改,s2 是函数的栈空间区域,函数执行完成,这个空间就没了。
    然而,这两者在作函数的形参的时候是完全等价的。
    void function(char *s1);
    void function(char s1[]);
    可以相当绝对的说这两种完全等价,没有任何区别。
    
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    5-JVM常用的命令
    4-JVM 参数
    3-JVM垃圾回收算法和垃圾收集器
    2-JVM内存结构
    1-JVM基础
    非常短的git学习笔记
    白话马尔科夫链蒙特卡罗方法(MCMC)
    写了个小游戏,来玩
    胡小兔的 高考2019 游记
    机房志 | 一篇中二的文章
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965606.html
Copyright © 2011-2022 走看看