首页 > 其他分享 >C语言字符串漫谈

C语言字符串漫谈

时间:2022-11-18 20:03:03浏览次数:58  
标签:字符 const 漫谈 C语言 char 数组 字符串 hello

在C语言中写字符串,我们一般这样定义变量

const char* str = "hello";

乍看这样的赋值方式有点费解,前面是一个char*指针,str指向一个char字符的指针,而后面是一个字符串,怎么都感觉类型不一致。

其实C语言应该说没有单纯的所谓字符串类型,所谓的字符串,只不过是一个个char类型字符成的数组,数组的最后一个元素是'\0'

在VS上打印输出看看

显示字符串"hello" 确实是const char[6] 类型,即字符数组类型,这边的字符数组的长度是6,而“hello”字符串是5个字符,实际存数组里面的最后一个元素是字符'\0'。

通过类型  const char[6] ,我们看到该字符数组中的每一个char类型元素都是const,表示常量,不可修改的。所以“hello”是一个不可修改字符的字符数组, 我们一般称这种加了双引号的字符字面量  为字符串。

当我们在代码中 写上一个字符串 "hello"  相当于在全局做了这样的定义    const char str[6]={'h','e','l','l','o','\0'}  。直接写“hello”相当于写字符数组的一个语法糖而已,如果你不嫌弃麻烦,完全可以用

 const char str[6]={'h','e','l','l','o','\0'} 这种方式,代替"hello"。

看下GCC下的汇编代码

不管是字符串字面量"hello"还是通过字符数组strArr的方式定义,在汇编代码中都对应了一个标签,显示hello

则两则一模一样,没任何区别

对于strPtr和strPtr2的赋值,都是获取指向第一个字符'h' 的指针。

为什么会是第一个字符元素的指针呢?

因为当字符数组作为右值表达式时,总是退化为首元素的指针,  类型为const char*,  所以我们申明的strPtr和strPtr2变量,都是const char*类型。

所以其实字符串一点也不神秘  就是一个字符数组,每一个字符都是const  ,导致不可修改。

我也可以定义int类型的不可修改数组,称之为int整型串。

const int intArr[3] = { 1,2,3 };
int main() {
    const int* intPtr = intArr;
    return 0;
}

跟我们之前定义的字符数组使用方式一样。

当你知道了字符串其实就相当于字符数组的时候,那么所有对字符串的操作,其实就是对数组和指针的操作。

上面的intArr数组,会被加载到一个只读内存中,我们尝试通过任何方法去修改该区域,运行时会报没有权限修改的异常

而字符串不可修改的原来也是如此。

 

标签:字符,const,漫谈,C语言,char,数组,字符串,hello
From: https://www.cnblogs.com/fuyun2000/p/16904750.html

相关文章

  • C#.net 格式化输出XML文档字符串
    试用登录http://121.18.78.216/        ///<summary>       ///返回经过格式化处理的xml文档       ///</summary>       ///<param......
  • 去除字符串中的html标签
        ///<summary>    ///将Html标签转化为空贾世义    ///</summary>    ///<paramname="strHtml">待......
  • 获得字符串长度(双字节的汉字按2计算)
    ///<summary>       ///获得字符串的字节数贾世义       ///</summary>       ///<paramname="value"></param>......
  • C语言uint8
    一、C语言基本数据类型回顾在C语言中有6种基本数据类型:short、int、long、float、double、char1、数值类型1)整型:short、int、long2)浮点型:float、double2、字符类型:cha......
  • C语言函数的取地址符和星号
    最近对函数的星号和取地址符有些困惑于是写了这一点简单的代码来回忆一下;1、#include<stdio.h>voidf(intx,inty){intt;t=x;x=y;y=t;printf("x=%d;......
  • 【c&c++】C语言 结构体 - 字节对齐 使用预处理命令 #pragma 对齐
    在C语言中每个数据类型都有他的对齐方式例如char是一个一节对齐,int是四个字节对齐,float是八个字节对齐,short是两个字节对齐由于对齐方式的特性就会拥有相同成员的结......
  • C语言:找最大交错正方形
    题目图上有一个矩阵,由N*M个格子组成,这些格子由两种颜色构成,黑色和白色。请找到面积最大的且内部是黑白交错(即两个相连的正方形颜色不能相同)的正方形。输入格式:第一行两......
  • html字符串转pdf源码
        ///<summary>     ///将Html文字输出到PDF     ///</summary>     ///<paramname="htmlText......
  • C语言:计算器
    题目请你编写一个科学计算器,支持多括号嵌套的四则运算,三角函数及指数对数运算功能可选(功能越多越好,指数的输入格式为a^b,对数的输入格式为logab,(其中a为底数))代码#in......
  • C语言:约瑟夫环
    题目n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。 例如:  ......