我们在编写一个处理基本数据类型(如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的地址给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= #
//int* const p = #
//*p = 20; //const修饰指针,放在 * 的右边,表示的是指针变量本身不能修改,但是指针指向的内容可以通过指针来修改
return 0;
}