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

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

  • 相关阅读:
    python基础(str,list,tuple)
    MySQL数据类型概念
    Ubuntu安装sublime
    Ubuntu安装pycharm
    ubuntu安装mysql
    微信小程序注册开发流程
    新开篇
    被玩坏了的题——马的遍历
    一道数学恶心题——小凯的疑惑
    搜索基础题:八皇后
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965607.html
Copyright © 2011-2022 走看看