zoukankan      html  css  js  c++  java
  • C++(二十四) — 指向字符的指针为什么可以用字符串来初始化,而不是字符地址?

    一、C语言中,为什么字符串可以赋值给字符指针变量?

    char *p;
    a='5';
    p=&a;                     //显然是正确的,
    p="abcd";              //但为什么也可以这样赋值??
    问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点!
    答:双引号做了3件事:  
    • 1.申请了空间(在常量区),存放了字符串 
    • 2. 在字符串尾加上了'/0'    
    • 3.返回地址
    你这里就是 返回的地址  赋值给了  p                      

    二、char *p = “hello”;  表达式为什么可以,而把p换成数组,然后再赋值就不行了

    解释:别说换成数组,就是 char *pch1 = 'h'; 都是不可以的,因为双引号做了3件事,别的都不会做。

      字符串常量"hello"出现在一个表达式中时,"hello"表达式使用的值就是这些字符所存储的地址(在常量区),而不是这些字符本身。所以,可以把字符串赋值给指向字符的指针p,而不能把字符串赋值给一个字符数组。 

      char a[10] = “hello”; //这样可以,这种情况是c语言初始化所支持的

    如果写成char a[10]

    然后 a = “hello” 这样就错误了。  

    同样是a数组,char a[10] = “hello”;这种是数组的初始化,和a[0] = ‘h’ a[1] = ‘e’…是一个道理

    但是换成char a [10],然后a = “hello”就不行了。 “hello”赋值的值是一个地址,而a虽然也有地址,但是这与指针是不一样的,指针的值是地址,而数组的值虽然也是地址,但是却是一个常量,所以不能给常量赋值。

    参考文献:https://blog.csdn.net/leigelaile1/article/details/77511323

  • 相关阅读:
    总结Linq或者lamdba的写法
    JObject 用法 、JProperty 用法、JArray 用法 Linq 转 Json
    System.DateTime.Now 24小时制。
    将springboot jar应用打包成镜像并在docker运行成容器
    RPC框架——简单高效hessian的使用方式
    WebService—规范介绍和几种实现WebService的框架介绍
    Java三大体系JavaEE、JavaSE、JavaME的区别
    JavaEE体系架构
    JavaEE 技术体系
    注解之@CookieValue
  • 原文地址:https://www.cnblogs.com/eilearn/p/10152472.html
Copyright © 2011-2022 走看看