#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
//第一种方法:
//void my_strcpy(char* array1, char* array2)
//{
// while (*array2 != '\0') //这里不能是array2 != '\0',因为地址是永远不会等于\0的
// {
// *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("%s\n", array1); //%s不能输出整型数组,只能输出字符串
my_strcpy(array1, array2);
printf("%s\n", 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;
}
C语言:关于const修饰指针的知识点
最新推荐文章于 2023-01-11 20:42:10 发布