美文网首页
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