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[]);
    可以相当绝对的说这两种完全等价,没有任何区别。
    
    

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

  • 相关阅读:
    二分查找:思路很简单,细节是魔鬼
    今天遇到了 X-Y PROBLEM
    《工匠精神》读书笔记
    养成好的职业习惯
    php xdebug 调试
    Dockerfile的常见命令
    docker制作镜像
    脱坑笔记
    Java中代理
    2、遇到多个构造器参数的时候要考虑使用构建器
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965607.html
Copyright © 2011-2022 走看看