首页
学习
活动
专区
圈层
工具
发布

C语言中char类型的数据范围陷阱

基础概念 1.char类型是什么 char类型是也是属于整形。 因为char类型存储字符信息是通过存储对应的ASCII值来进行存储。而ASCII的值就是整数类型。...2.char类型的取值范围 char类型的存储大小只有一个字节,即8bite(8位二进制数)。整型家族里都有 signed(有符号数) 和 unsigned(无符号数)两种类型。...所以signed char 的取值范围:-128~127;(注:1000 0000 默认值位-128) unsigned char 的取值范围是:0 ~ 255 ; 代码实例演示 下图的strlen...return 0; } 运行结果 结果是 255 很多人可能会好奇,上述内容我提到默认的char类型的默认类型是signed (有符号数)类型。其存储的数据范围是 -128~127 。...这就是char类型存储的一个 陷阱 char类型的陷阱的解释 在上面的测试中我们已经明白了char类型在计算机的存储过程中并不是按照数学意义上的从大到小的顺序进行存储,而是按照下图所示的方式进行存储。

96610

深入 char * ,char ** ,char a ,char *a[] 内核

5  char *  与 char  a[ ];        char  *s;        char  a[ ] ;        前面说到 a代表字符串的首地址,而s 这个指针也保存字符串的地址...用一句话来概括,就是 char *s 只是一个保存字符串首地址的指针变量, char a[ ] 是许多连续的内存单元,单元中的元素为char ,之所以用 char *能达到  char a  [ ]...但是,char* 和 char a[ ] 的本质属性是不一样的。。     ...6      char **  与char  * a[ ] ;             先看 char  *a [ ] ;             由于[ ] 的优先级高于* 所以a先和 [ ]结合...char **s;        char **为二级指针, s保存一级指针 char *的地址,关于二级指针就在这里不详细讨论了 ,简单的说一下二级指针的易错点。

3.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    char *a 与char a[] 的区别

    char *a = “hello” 中的a是指向第一个字符‘h’的一个指针 char a[20] = “hello” 中数组名a也是执行数组第一个字符‘h’的指针 *但二者并不相同:* 看实例...两者区别如下: 一. ”读“ ”写“ 能力 char *a = “abcd”; 此时”abcd”存放在常量区。通过指针只可以访问字符串常量,而不可以改变它。...而char a[20] = “abcd”; 此时 “abcd”存放在栈。可以通过指针去访问和修改数组内容。 二. 赋值时刻 char *a = “abcd”; 是在编译时就确定了(因为为常量)。...而char a[20] = “abcd”; 在运行时确定 三. 存取效率 char *a = “abcd”; 存于静态存储区。在栈上的数组比指针所指向字符串快。...因此慢 而char a[20] = “abcd”; 存于栈上。

    1.9K10

    char类型详解

    char的初始化 char是Java中的保留字,与别的语言不同的是,char在Java中是16位的,因为Java用的是Unicode。...因为char是16位的,采取的Unicode的编码方式,所以char就有以下的初始化方式: //字符,可以是汉字,因为是Unicode编码 char c = 'c';  //可以用整数赋值 char c...注:char只能放单个字符。  char运算 char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值。...//195没有超出int范围,直接输出195。 charm = 'a' + b;  ——会报错。//因为b是一个赋值的变量。 charm = 197;     //输出字符编码表中对应的字符。...char+ char,char + int——类型均提升为int,附值char变量后,输出字符编码表中对应的字符。

    2.2K30

    MySQL:The CHAR and VARCHAR Types

    CHAR 和 VARCHAR 声明时格式为 CHAR(num) 和 VARCHAR(num),这里的 num 表示的是你想存储的最大字符数。注意是字符数,而不是字节数。...一、长度定义区别 CHAR(num),存储时长度是固定的,num值的范围在[0, 255](0和255均可取值)。当存储的字符不足时,会右边补足空格。...VARCHAR(num),长度定义为变长,num值的范围是[0, 65535]。需要注意的是这里的 65535 是所有列的总和不能超过的值,也就是说当只有一个 VARCHAR 列时可选的最大值。...而 CHAR 因为每次分配的空间都是固定的,因为不会有这个问题存在。 所以,当长度比较小或者长度固定时,更适合用 CHAR 类型来存储,因为不会经常变动,且节省了空间。...一般对于长度固定,或者长度特别小时,适合用 CHAR ,比如存储密码的 md5 值的情况就很适合用 CHAR 五、扩展 使用 VARCHAR(5) 和 VARCHAR(10) 存储 hello 的空间开销是一样的

    1.9K00

    string无法取代char*

    涉及字符串,C开发人员使用char*,大部分C++开发人员会优先使用string,其实string也不是万能。接下来,我将介绍string无法取代char*的三个场景。...特别是作为SDK导出的接口,字符串使用char*,而不能使用string。因为SDK的使用方使用的Visual Studio版本不确定,存在与SDK开发的Visual Studio版本不同。...所以,对性能要求特别高,希望对字符串的内存分配进行优化(比如从已分配的大块内存池上分配),就使用char*。...string只能返回const char*,不适合调用带有char*参数API的场景 string通过c_str()接口,返回const char*,适用于大部分C接口的场景,但是如果C接口是char*...虽然有些场景只能用char*,但是string的优点是非常明显的,开发人员无需担心内存管理的问题,对字符串的操作也很方便。所以,如果不存在性能和第三方接口对接问题,强烈建议使用string。

    1.3K30
    领券