zoukankan      html  css  js  c++  java
  • C语言数组篇(三)字符空间 和 非字符空间

     一维数组和字符串
            首先是字符数组(区别字符串)
    char buf[10] = {'a','b','c'};   //这只是单纯的字符数组,不是字符串
            
      字符串最重要的标志就是结尾有一个'',所以如果表示字符串数组的话,要在结尾多一个''
           
     
       但是,真的字符串数组有另一个更标准的表达形式
    char buf[10] = {"abc"}; // "" 双引号会自动在结尾添加一个''
            简化为: char buf[10] = "abc" ;
            字符串数组和字符串指针的区别.
            首先声明
    char buf[10] = "abc";
    const char *p = "abc";
            字符串数组是可以对其中的元素进行改变的,比如 buf[0] = 'k' 那buf就是 kbc;
            但是字符串指针不行, 指针变量p只是一个指针,它指向一个字符串常量,里面的内容是无法改变的 . *p = 'k' 只会报段错误.
     
     
        
    字符空间 和 非字符空间
            定义:(详解)
                数据类型有 字符型非字符型 :
      
                字符型有两个条件组成:
        1. 数据大小是char
        2. 数据的内容是可以通过ascii码转成字符的.
        叫做字符数据.
                比如 'A' 'B' 'c' 这些,就是字符类型的数据.但是,这样表达一眼就看出来是字符型数据了,没有什么意义啊.

      这要从内存空间开始说起..

        内存的最小空间是bit 是最小最小的格子.
        而数据的最小单位是char 1char = 8bit, 再往上还有int float long 等等...
                        
        那既然字符的首要条件是char类型的数据,我们就从char 这8个小格子说起.
        _ _ _ _ _ _ _ _ 8个bit=char

      字符空间:

                    1个char 只能用来表示一个字符 比如字符 'A'
                    那么 由char组成的数组,就是字符串的概念 char buf[10] ={'A', 'B', 'C', '0'}; //有4个char
                    但是 拿字符'A'来举例, 字符'A' 的ascii码是65, 换成2进制是 0100 0001
                    所以 'A'的char 8个空间的小格子就是 0100 0001 .
                    那么,再正推一次.来看看什么是字符空间.
        
          1. 因为我定义了 char buf;   //表示buf是一个char大小8个小格子的数据,因为是char类型,所以能转换成ascii码,所以它就具备了字符空间的能力
          2. buf = (二进制)0100 0001     //因为buf这8个小格子的内容实际上是这样表示的,所以经过转码 它转换后的字符就是 'A'
                    所以,我们在希望表达 它是一个字符空间的时候,定义成 char buf[10],并且字符空间的结尾一定是''

      非字符空间:

                    那什么事非字符空间呢? 非字符空间有很多种 char int float long...
                    最特殊的就是 char.
     
                    因为char 是软件的最小单位,在除了他能够表达一个字符数据以外,有时候我们纯粹是想记录一组数据.
     
                        比如:温度传感器检测到的温度,或者电机此刻的转速,等等这些 我们并不想转换成 字符的数据, 就称做非字符空间 .
     
                        我们当然可以用int来存储这样的数据,但是这是特别浪费内存的一件事,因为有些数据的大小可能就很小    .用char大小是完全能够表达的.
                        
                        假设我们现在定义一个数组来记录一天内采集到的温度 char tmp[24];
                        但是这样定义不就跟字符串数组一样了吗,我又该怎么区别 这是 字符空间 还是 非字符空间?
     
                        因为以上的困惑,我们规定
                        在表达字符空间 字符串数据的时候 定义成 char buf[10]
                        在表达非字符空间 只是单纯大小是char 大小的数据的时候 定义成 unsigned char buf[10]




            api:
                字符空间:
                    //字符串拷贝,一旦拷贝时发现0,就停止拷贝
                    char *strcpy(char *dest, const char *src);                  //不安全,内存泄漏
                    char *strncpy(char *dest, const char *src, size_t n);       //安全,拷贝n个字符
     
                    //将s2接在s1末尾.
                    char *strcat(char *dest, const char *src);
                    char *strncat(char *dest, const char *src, size_t n);
                    
                    //比较两个字符串,如果s1 == s2 ,则返回0, s1< s2 返回值小于0, s1>s2 返回值>0 .
                    int strcmp(const char *s1, const char *s2);
                    int strncmp(const char *s1, const char *s2, size_t n);
     
                    //返回s的长度
                    size_t strlen(const char *s);
     
                非字符空间:
                    //因为非字符串空间没有'',所以只能通过拷贝的字符数来描述
                    void *memcpy(void *dest, const void *src, size_t n);
     
                    //比较
                    int memcmp(const void *s1, const void *s2, size_t n);
     
                    //赋值(清零)
                    void *memset(void *s, int c, size_t n);
                    ...
  • 相关阅读:
    uva 408 Uniform Generator
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
  • 原文地址:https://www.cnblogs.com/kmist/p/10073651.html
Copyright © 2011-2022 走看看