保护数组中的数据

本文介绍了在C语言中,如何选择传递基本数据类型和数组的方式,强调了在需要修改数值时使用指针传递的效率优势。同时,详细阐述了const关键字在保护数组和变量内容不变中的作用,以及const修饰指针的不同用法,包括指针指向的内容不可变和指针本身不可变两种情况,并通过示例代码进行说明。
摘要由CSDN通过智能技术生成

        我们在编写一个处理基本数据类型(如int)的函数时,要选择传递int类型的值还是传递指向int的指针,通常都是直接传递数值,只有程序需要在函数中改变数值时,才会传递指针。但对于数组别无选择,必须选择指针传递,因为这样做效率高。如果一个函数按值传递数组,则必须分配足够的空间来储原数组的副本,然后把原数组所有的数据拷贝新的数组中,如果把数组的地址传递给函数,让函数直接处理则效率要高。
传递地址会导致一些问题,C通常都是按传递数据,因为这样可以保证数据的完整性,如果函数使用的是数据的副本,就不会修改原使数据。但处理数组的函数通常都需要使用原始数据
 

const修饰的数据

如何使用const关键字保据数内容
我们定义一个const修饰的数组:

const int array[]={1,1,1,1,1,};
const int num=10;//num只能读取不能修改

//如果想在程序后面想改变数组中的数据就会生成一个编泽期错误消息
array[2]=0;//err 编泽错误
num=100; //err

//指向const的指针不能用于改变值
int array2[]={2,2,2,2,2,2};
const int* pd2=&array2;
//把pd2指向的int的类型声明为lonst,这表明不能使用Pd2上来更改它所指自的值.
*pd2=3;//err
pd2[2]=3;//err
array2[0]=3;//array2未被const修饰
//pd2可以指向别处。
关于指针赋值和cnst需要注意一些规则、首先把const数据或非Const数据的地址初始为指向corst的指针或为其赋是合法自

	double retes[5] = { 88.99,101.00,60.00,183.11,340.5 };
	const double locked[4] = { 0.08,0.075,0.725,0.073 };
	const double* pc = retes;
	pc = locked;
	pc = &retes[3];//有效.


 

#include<stdio.h>
int main()
{
		const int num = 1;
		//num = 2;err  //const修饰num 此时num只能读取不能修改
		const int* p=&num;// 把num的地址给p;
		//*p = 10;此时(*p)只能读取不能修改
		printf("%d\n", num);//1
		//但我们可以改变P的指向
		int ret = 12;
		p = &ret;//但仍不能通过(*p)为改变ret
		printf("%d", *p);//12
	//总结:const饰指针,放在*的左边,表示指针指向的内容,不通过指针来修改,但是本身量本身修改.
			//int ret = 100;
			const int num1 = 11;
			const int * p1= &num;
			//int* const p = &num;
			//*p = 20; //const修饰指针,放在 * 的右边,表示的是指针变量本身不能修改,但是指针指向的内容可以通过指针来修改
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值