C语言:关于const修饰指针的知识点

#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 = &num;
	//*p = 20;// 此时就不能再次通过地址修改num的值
	int n = 20;
	p = &n;//指针变量可以修改,但是*p不能修改

	 //const修是指针变量的时候,放在*的右边,指针不能改变,但是指针指向的内容可以随意改变
	//int* const p = &num;
	//*p = 20;可以通过*p修改num的值
	//int m = 20; 
	//p = &m;//这两行代码错误,指针变量已将不能被修改

	//int* p = &num;
	//*p = 20;//num为常变量,但是这里却能通过指针修改它的值,此时num为20

	//const int* p = &num;
	//*p = 20; 此时就不能再次通过地址修改num的值
	printf("%d", num);
	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值