美文网首页
C/C++基础(2)

C/C++基础(2)

作者: 想起个帅气的头像 | 来源:发表于2020-09-23 00:05 被阅读0次

    字符串

    定义

    char buf1[] = "abcdef";
    char buf2[] = {'a', 'b', 'c', 0, 'd'}; // 数组值位abc
    char buf3[] = {'a', 'b', 'c', '\0', 'd'}; // 数组值位abc
    char buf4[100] = {'a', 'b', 'c'}; // 后面97位补0
    char buf5[100] = { 0 }; //初始化都是0

    //error
    char buf[] = {'a', 'b', 'c'}; //不指定数组大小,也没有结束符 '\0', 数字0,则数组会乱码。

    strlen: 计算字符串长度,不包含0和\0
    sizeof: 计算数组长度,包含0和\0
    char buf[] = "1234567890"; 因为默认有\0结尾,sizeof的值是11
    char buf[100] = "1234567890"; 因为已经指定长度是100,且后续位数补0, 则sizeof长度是100

    操作

    char buf[] = "abcdefghi";
    char *p = buf; //数组名字 即 数组首元素地址
    for(int i=0;i<strlen(buf);i++) {
    printf("%c", buf[i]);
    }
    for(int i=0;i<strlen(buf);i++) {
    printf("%c", *(buf+i));
    }
    for(int i=0;i<strlen(buf);i++) {
    printf("%c", p[i]);
    }
    for(int i=0;i<strlen(buf);i++) {
    printf("%c", *(p+i));
    }
    四者等价,但是buf[] 属于常量,不能修改

    字符串拷贝
    char src[] = "abcdefg";
    char dest[100];
    
    strcpy1(char *src, char *dest) {
      //判空
      for(int i=0;src[i] != '\0'; i++) {
        dest[i] = src[i];
      }
      dest[i] = 0; //结尾补0,如果初始化时定义char desc[100] = {0}; 结尾就不需要补0
    }
    
    strcpy2(char *src, char *dest) {
      //判空
      for(int i=0;src[i] != '\0'; i++) {
        dest[i] = src[i];
      }
      dest[i] = 0; //结尾补0,如果初始化时定义char desc[100] = {0}; 结尾就不需要补0
    }
    
    strcpy3(char *src, char *dest) {
      //判空
      while(*src != 0) {
        *dest = *src;
        dest++;
        src++;
      }
    }
    
    strcpy4(char *src, char *dest) {
      //判空
      while(*src != 0) {
        *dest++ = *src++;
      }
    }
    

    const

    const修饰一个变量为只读,定义时需要初始化。(但是可以通过间接指针的方式修改)

    const int a  = 100;
    a = 10; //error
    
    理解点
    //从左往右,跳过类型,看修饰的是什么字符
    //如果是*,说明指针指向的内存不能变
    //如果是变量,说明指针的指向不能变,内存可以变
    //双重修饰,则什么都不能变
    char buf[] = "abcdefg";
    const char *p = buf;    //1
    char const *p = buf;    //2
    char * const p = buf;   //3
    const char * const p = buf;  //4
    

    1,2等价且内存不能变,3的指向不能变,4是完全只读
    如果是结构体,则内部属性指向类似内存,原则同上

    相关文章

      网友评论

          本文标题:C/C++基础(2)

          本文链接:https://www.haomeiwen.com/subject/uttnyktx.html