`

对形式参数使用const

 
阅读更多

     在编写处理诸如int这样基本类型的函数时,可向函数传递int数值,也可传递int型的指针,通常我们直接传递数值;只用在需要在函数中改值时,我们才传递指针。

     对于处理数组的函数,只能传递指针,这样可使程序的效率更高。

     如果通过值向函数传递数组,则函数中必须分配足够存放一份原数组的拷贝的存储空间,然后把原数组的所用数据复制到这个新数组中。如果简单的把数组的地址传递给函数,然后让函数直接读写原数组,程序的效率会更高.

     然而这种技术也会带来一些问题。通常C传递数据的值,其原因是要保证原始数据的完整性。函数使用原始数据的拷贝,这样就不会意外的修改原始数据。但是,由于处理数组的函数直接操作原始数据,所以他能修改原始数据。通常我们在使用数组时做参数时并不希望修改数组的值,如编写一个显示数组所有元素值的函数show_array(double ar[]),然而若在函数中不小心修改了数组的值,可能会违背写这个函数的目的。 

      ANSI C中提供了一个解决此问题的方法。如果设计意图是函数不改变数组的内容。那么可以在函数原型和定义的形式参数声明中使用关键字const。

下面的例子中有两个函数。

 

#include<stdio.h>

#define SIZE 5

void show_array(const double ar[],int n);//显示所有元素,使用了const关键字
void mult_array(double ar[],int n,double mult);  //修改数组中的元素
int main(int argc,char *argv[])
{
	double dip[SIZE] = {20.0,17.66,8.2,4.5,2.3};

	printf("the original idp array:\n");
	show_array(dip,SIZE);
	mult_array(dip,SIZE,2.5);
	printf("the dip array after calling mult_array():\n");
	show_array(dip,SIZE);

	
	return 0;
}

//显示数组内容
void show_array(const double ar[],int n)
{
	int i;
	for(i = 0;i < n; i++)
		printf("%8.3f",ar[i]);
	putchar('\n');
}

//数组中的元素同乘以一个数
void mult_array(double ar[],int n,double mult)
{
	int i;

	for(i = 0; i < n;i++)
		ar[i] *=mult;
}

 

 说明:

void show_array(const double ar[],int n);//原型

 

 

 

//定义
void show_array(const double ar[],int n)
{
	int i;
	for(i = 0;i < n; i++)
		printf("%8.3f",ar[i]);
	putchar('\n');
}

 

 

  这告知编译器:函数应当把ar所指向的数组作为包含常量数组的数组对待。这样,如何在函数中不小心改变了数组元素的值,编译器会报错,通知函数视图修改常量。

 

 

 

总之,如果函数想修改数组的值,那么在函数声明和定义时不使用const,如何不想修改数组的值,则最好在声明数组参数是使用const。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    C语言CONST的使用

    5. 函数重载:const可以用于函数重载,通过const限定函数参数的常量性,可以区分不同函数的重载形式。 6. 内存优化:使用const定义的常量只有一份拷贝,不会在内存中产生多个拷贝,这有助于节省内存空间。 7. ...

    c语言之const用法

    这种形式通常用于在数组形式的参数中模拟传值调用。函数调用者声称:"我给你一个指向它的指针,但你不能去修改它。"如果函数编写者遵循了这个约定,那么就相当于模拟了值传递。 4. const 用于限定函数的返回值 ...

    c++中const用法总结

    为提高效率,应改为“引用传递”方式,即使用`void Func(const A& a)`这样的形式,这里的`const`可以防止意外修改参数`a`。 3. **内部数据类型的输入参数**: - 不建议使用“引用传递”并添加`const`,因为这样做...

    const用法 const int *a; int * const a;

    在C++编程语言中,`const`关键字用于声明常量,它可以用来修饰变量、指针、引用等...在编写代码时,合理地使用`const`不仅可以优化性能(例如,编译器可以对常量进行优化),还能帮助开发者设计更安全、更清晰的接口。

    CONST用法

    在函数的参数列表中使用`const`关键字,可以限制对参数的修改,这对于函数的调用者来说非常重要。具体有以下几种情况: 1. **修饰输入参数**: - **指针传递**:当参数通过指针传递时,可以在指针前加上`const`...

    关于const在C++中的用法

    `const`与指针结合使用时,可以有三种主要形式: - `const int *a;` 表示`a`是一个指向`const` int的指针,也就是说,通过`a`所指向的整型数据是不可以修改的。 - `int * const a;` 表示`a`是一个指向整型数据的...

    const的理解和用法

    在函数的参数列表中使用`const`可以指定传入的参数不能在函数内部被修改。例如,在下面的例子中,`FindNum`函数接收一个整型数组`array`作为参数,并且通过使用`const`来确保该数组在函数内部不会被改变: ```cpp ...

    c语言const.pdf

    const的使用不仅涉及到变量的声明,还包括指针和引用,以及在函数参数和返回值中的应用。 首先,const类型定义的目的是明确指出某个变量或对象的值是不可被更新的。这有助于防止编程过程中的意外修改,增强了程序的...

    const用法与详细解释

    - **结合使用**:可以同时使用以上两种形式,即指针本身和其所指的内容都声明为常量。 ```cpp const char *const cpc = "Hello World"; // 不能修改内容,也不能重新指向 ``` ##### (3) 修饰函数传入参数 - **...

    关键字const的用法

    ### 关键字`const`的深入理解与应用 #### 一、引言 ...此外,需要注意的是,虽然`const`可以限制对数据的直接修改,但它并不能阻止所有形式的修改。因此,在实际编程中还需要结合具体场景谨慎使用。

    const的作用

    - **作用**:当函数的形式参数为用户自定义类型时,使用`const`可以优化函数调用的性能。 - **示例**: ```cpp // 不使用const void fun1(MyClass a) { // ... } // 使用const void fun2(const MyClass &a) ...

    浅谈C++中的几个关键字static,const,inline.doc

    * static 使得变量或对象的存储形式变成静态存储,连接方式变成内部连接,对于局部变量(已经是内部连接了),它仅改变其存储方式;对于全局变量(已经是静态存储了),它仅改变其连接类型。 const 关键字的详细...

    关键字const用法

    接下来,`const`可以与指针结合使用,有两种常见的形式: 1. `const`指针:指针指向的内容是不可变的。 ```c const int *p = &a; // p指向一个常量整型变量 ``` 在这个例子中,`p`是一个指向`int`的指针,但`p`所...

    小程序中canvas的drawImage方法参数使用详解

    举个例子,如果你只想在画布上绘制图片的一部分,那么可以使用第三种形式,并适当设置sx和sy的值来确定从源图像的哪个位置开始绘制,同时设置sWidth和sHeight来指定绘制的宽度和高度。 示例代码如下: ```...

    20121022_动态分配const对象(C++)1

    而动态分配const对象则是这种操作的一个特殊形式,它涉及到在运行时创建不可变的对象。const关键字在C++中用于声明变量或函数参数为常量,表示它们的值在声明后不应被修改。 动态分配const对象的基本语法是: ```...

    详解C/C++中const限定符总结

    需要注意的是,`const`不仅应用于变量,还可以应用于函数参数、返回类型,甚至类的成员,体现了C++对常量正确性的全面支持。在实际编程中,应根据需求灵活运用`const`,遵循“尽可能多地使用`const`”的原则,以提高...

    C语言中 const 的用法

    总的来说,`const`关键字在C语言中提供了对数据不变性的保护,帮助避免意外修改数据,提高代码的稳定性和安全性。正确使用`const`可以使代码更加清晰,更易于理解和维护。理解并熟练运用`const`的这些用法是C语言...

    Express获取get和post传过来的参数

    1. **应用/x-www-form-urlencoded**:这是最常见的情况,参数以键值对形式存在于请求体中。我们可以通过`req.body`获取: ```javascript // 首先,需要安装body-parser中间件 const bodyParser = require('body-...

    详解C语言中const关键字的用法

    总的来说,`const`关键字在C语言中提供了对变量的常量约束,提高了代码的安全性和可读性。通过使用`const`,可以更好地捕捉潜在的逻辑错误,并在编译阶段就进行检查,避免运行时出现问题。因此,理解并熟练运用`...

Global site tag (gtag.js) - Google Analytics