1. 快捷键:
2. 实现自己的strcpy
void my_strcpy(char* dest,char* src) { int i=0; while(*(src)!='\0') { *dest=*src;//字符指针解引用可以访问一个字符 src++; dest++; } *dest=*src;//此时*src里面放的是\0 } int main() { char arr1[]="###########"; char arr2[]="bit"; my_strcpy(arr1,arr2); printf("%s\n",arr2); return 0; }
如何优化?
void my_strcpy(char* dest,char* src) { int i=0; while(*(src)!='\0') { *dest++=*src++;//这里1111111111111111 } *dest=*src; } int main() { char arr1[]="###########"; char arr2[]="bit"; my_strcpy(arr1,arr2); printf("%s\n",arr2); return 0; }
如何进一步优化?
void my_strcpy(char* dest,char* src) { while( *dest++=*src++)//这里:因为‘\0’=0 { ; } } int main() { char arr1[]="###########"; char arr2[]="bit"; my_strcpy(arr1,arr2); printf("%s\n",arr2); return 0; }
如何进进一步优化?
使用assert–断言–需要引用头文件#include<assert.h>
#include<assert.h> #include<stdio.h> void my_strcpy(char* dest,char* src) { assert(dest != NULL);//断言--如果不满足会报错--易于发现问题 assert(src !=NULL); while( *dest++=*src++)//这里:因为‘\0’=0 { ; } } int main() { char arr1[]="###########"; char arr2[]="bit"; my_strcpy(arr1,arr2); printf("%s\n",arr2); return 0; }
如何进进进一步优化?
#include<assert.h> #include<stdio.h> void my_strcpy(char* dest,const char* src)//这里加了const { assert(dest != NULL); assert(src !=NULL); while( *dest++=*src++) { ; } } int main() { char arr1[]="###########"; char arr2[]="bit"; my_strcpy(arr1,arr2); printf("%s\n",arr2); return 0; }
最终答案:
优化了哪里:
1.my_strcpy的返回类型是char*
2.加入了断言assert
3.使用了后置++
4.打印的时候变量是函数
#include<assert.h> char* my_strcpy(char* dest,const char* src)//加const是为了防止 //while(*dest++=*src++)中二者写反//为了保护源头的数据不会被修改 {//把src指向的字符串拷贝到dest指向的空间,包含‘\0’ char* ret=dest; assert(dest !=NULL); aeesrt(src !=NULL); while(*dest++=*src++)//先解引用-再赋值-再++ { ; } return ret; } int main() { char arr1[]="###########"; char arr2[]="bit"; printf("%s\n", my_strcpy(arr1,arr2);); return 0; }
2. const:
const来修饰指针:(const修饰不同位置作用不同)
1.const放在指针变量的左边时:
修饰的是 **p:也就是说–不能通过p来改变p(num)的值
int main() { const int num=10; const int* p=#//(由于给p加了const所以P无法改变) *p=20; printf("%d",num); return 0; }
2.const放在指针变量的*右边时: 修饰的是p:也就是说–p不能被改变
3.my_strlen
#include<assret.h> int my_strlen(const char* str)//求字符串长度//const保证内容不被改变 { int count=0;//要有一个计数器啊!!! assert(str !=NULL);//断言//保证指针的有效性 while(*str !='\0')// { count++; str++;//指针向后走一步!!! } return conut; } int main() { char arr[]="abcdef"; int len=my_strlen(arr); printf("%d\n",my_strlen(arr)); return 0; }