#include<stdio.h> #include<assert.h> //F5-启动调试和F9设置断点配合使用//先f9打断点,然后f5无论多远处直接到f9 //F10诸过程, //F11诸语句 shift+F11直接跳出循环 //shift f9快速调试 //调试 窗口 自动窗口 //内存数组名就是首元素地址 数组名 //调试窗口还有寄存器,反汇编 调用堆栈: //工具选项环境字体和颜色,调用堆栈窗口可调节字体 //函数调用时可以查看调用堆栈 //断点条件可以直接输入i=3;然后F5调节 char* my_strcpy(chardest, const charsrc)//10分版本 //const 常变量,此时src值不能被改变 变量加 //void my_strcpy(chardest, charsrc) { //if (dest != NULL && src != NULL)//传参时应该这样检测一下,防止崩溃 // //但不容易发现问题 //{ // //while (*src != '\0') // while (*dest++ = *src++)//最离谱的做法 // { // //*dest = *src; // //src++; // //dest++; // //*dest++ = *src++;//这样也行 // } // *dest = src; char ret = dest;//要返回1个首元素的地址才有意义 assert(dest != NULL);//断言,8分版本 assert(src != NULL); while (*dest++ = *src++)//最离谱的做法 { //*dest = *src; //src++; //dest++; //*dest++ = *src++;//这样也行 } //*dest = *src; //return dest;//返回一个数组末端的地址没有意义 return ret;//此时虽然ret被改,但首元素的地址没有变 }

my_strlen(const char*str)//1 { int count = 0; assert(str != NULL);//保证指针有效性//2 while (str != '\0') { count++; str++; } return count; }

int main() { //int i = 0; //int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //for (i = 0; i <= 12; i++) //{ // printf("hehe\n"); // arr[i]=0; //} //system("pause");

//栈区的默认使用先使用高地址,在使用低地址
//数组随着下标的增长,地址是由低到高变化的
//arr[12]的地址等于i的地址,然后arr[12]=0;把i的值也变为了0;

//i的定义要放在数组的定义前面,才能保证i的地址高

//int i = 0;
//int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//printf("%p\n", arr);
//printf("%p\n", &i);
//release版本下,i的地址更小一些(可能会出现一些问题)

//strcpy//字符串拷贝
//char arr1[] = "##########";
//char arr2[] = "bit";
//strcpy(arr1, arr2);//把arr2放入arr1中。前4位#换成了arr2
//printf("%s\n",arr2);


char arr1[] = "##########";//后面都有1个\0
char arr2[] = "bit";//
//my_strcpy(arr1, arr2);//把arr2放入arr1中。前4位#换成了arr2
printf("%s\n",my_strcpy(arr1, arr2));
//一个函数的返回值作为另外一个函数的参数,这就叫链式访问
//printf("%s\n", arr1);

//const int num = 10;//主观上讲num不能被改变,
//int*p = #
////const int*p = #//在这里加const,*p则不会被改变
////const放在指针左边,修饰的是*p,也就是说,不能通过p来改变*p(num)的值
//// int*const p = #//
////const放在指针右边,修饰的是p本身 p不能被改变。
//*p = 20;//但此时p知道了地址直接偷家了,所以这是非法操作
//printf("%d\n", num);


char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d\n", len);

return 0;

}