#define _CRT_SECURE_NO_WARNINGS 1 #include#include //第一种方法: //void my_strcpy(char* array1, char* array2) //{ // while (*array2 != ' ') //这里不能是array2 != ' ',因为地址是永远不会等于 的 // { // *array1 = *array2; //这里应该是要赋值,而不能是指针赋值 // array1++; // array2++; // } // *array1 = *array2; //} //第二种方法:算法优化 //void my_strcpy(char* array1, char* array2) //{ // assert(array1 != NULL);//断言,需要引头文件 // assert(array2 != NULL);//断言 // // while (*array1++ = *array2++) // { // ; // //1.缺点:传的是空指针,程序崩溃,+断言就能修复这个缺点 //2.缺点:如果传的指针反了,那程序就会崩溃 // } //} //第三种方法:算法再次优化 void my_strcpy(char* array1, const char* array2) { assert(array1 != NULL);//断言,需要引头文件 assert(array2 != NULL);//断言 while (*array1++ = *array2++) //此时指针变量位置如果反了,就会报错 { ; } } int main() { //模拟实现库函数strcpy函数 //int array1[20] = "xxxxxxxxxxxx"; //这里不能用一个整型数组来接受字符串 char array1[20] = "xxxxxxxxxxxx"; char array2[] = "Hello"; //strcpy(array1, array2); //利用库函数来赋值数组 //printf("%sn", array1); //%s不能输出整型数组,只能输出字符串 my_strcpy(array1, array2); printf("%sn", array1); const int num = 10; //const:修饰变量,这变量就称为常变量,不能被修改 //const如果放在*的左边,修饰*p,表示指针指向的内容不能通过地址修改。但是指针变量本身可以修改,可以改变其他变量的值 const int* p = # //*p = 20;// 此时就不能再次通过地址修改num的值 int n = 20; p = &n;//指针变量可以修改,但是*p不能修改 //const修是指针变量的时候,放在*的右边,指针不能改变,但是指针指向的内容可以随意改变 //int* const p = # //*p = 20;可以通过*p修改num的值 //int m = 20; //p = &m;//这两行代码错误,指针变量已将不能被修改 //int* p = # //*p = 20;//num为常变量,但是这里却能通过指针修改它的值,此时num为20 //const int* p = # //*p = 20; 此时就不能再次通过地址修改num的值 printf("%d", num); return 0; }



