#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
//void my_strcpy(char* a, char* b)
//
//{
// while (*b != '\0')
// {
// *a = *b;
// b++;
// a++;
// }
// *a = *b;
//}
//void my_strcpy(char* a, char* b)
//
//{
// while (*b != '\0')
// {
// *a++ = *b++;
//
// }
// *a = *b;
//}
char* my_strcpy(char* a, const char* b)//给b指针前面加一个const,是为了防止下面循环中拷贝拷反了,并且能及时报错
//比如说:下面循环条件不小心写成了(*b++=*a++),这样就不能达到想要的效果
//在b指针前面加一个const可以在运行程序时会在软件下方错误列表及时报错
//便于找到错误
{
char* ret = a;//将目标空间的首地址存起来
//断言
assert(b != NULL);
assert(a != NULL);//assert语句用来判断a,b是否为空指针
//如果a和b之中任意一个为空指针的话,程序运行会报错
//运行窗口会告诉你错误信息,
while (*a++ = *b++)//后置++的优先级高于“=”操作符,当b指向\0时判断条件为假,终止循坏
{
;
}
//return a;//返回目标空间的首地址
//将函数从void类型改为char*类型便于进行链式访问
}
int main()
{
char a[20] = "xxxxxxxxxxs";
char b[] = "hello everyone";
char* p = NULL;
//strcpy(a,b);//strcpy函数拷贝字符串的时候,会把原字符串的\0也拷贝过去
//my_strcpy(a, p);
printf("%s\n", a);
//printf("%p\n", my_strcpy(a, b));
return 0;
}
//const对指针的一些作用
int main()
{
int num = 100;
int n = 10;
const int* p = #
//*p = 102; 错误
//当const写在*的左边,p指向的对象不能通过p来改变了,但是p变量本身的值是可以改变的
//? 代表是未知值(这是方便自己理解,不是c语言中的标准)
//其实就是num的值不能通过“*p=?”这个赋值表达式来修改了,但是p这个指针变量指向的位置可以发生变化
//p = &n; //对的
int* const u = #
//*u = 1000;//对的
//u = &n;//错的
//当const在*的右边,u所指向的对象可以通过u来改变,但是u变量本身的值无法通过p来改变
//其实就是num的值可以同“*u=?”这个赋值表达式来更换,但是u这个指针变量所指向的位置不能更改
printf("%d\n", num);
return 0;
}
assert函数的基本了解 和 const函数对指针的作用
最新推荐文章于 2024-08-09 22:34:59 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)