首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

相同函数的C const/non-const版本

在C语言中,函数的const和non-const版本主要用于处理不同的参数类型和使用场景。以下是对这两种版本的详细解释:

  1. Const版本:

const版本的函数主要用于处理const类型的参数,即不可修改的参数。这种版本的函数可以保证在处理参数时不会意外地修改参数的值。const版本的函数声明如下:

代码语言:c
复制
return_type function_name(const parameter_type *parameter_name);

例如,如果我们有一个名为printArray的函数,用于打印整数数组,我们可以为其创建一个const版本:

代码语言:c
复制
void printArray(const int *arr, int size) {
    for (int i = 0; i< size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
  1. Non-const版本:

non-const版本的函数主要用于处理可修改的参数。这种版本的函数可以在处理参数时修改参数的值。non-const版本的函数声明如下:

代码语言:c
复制
return_type function_name(parameter_type *parameter_name);

例如,如果我们有一个名为sortArray的函数,用于对整数数组进行排序,我们可以为其创建一个non-const版本:

代码语言:c
复制
void sortArray(int *arr, int size) {
    for (int i = 0; i< size - 1; i++) {
        for (int j = 0; j< size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

总结:

  • Const版本的函数用于处理const类型的参数,保证不会意外修改参数的值。
  • Non-const版本的函数用于处理可修改的参数,可以在处理参数时修改参数的值。
  • 在实际编程中,根据需要选择合适的函数版本,以确保代码的安全性和可维护性。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++使用非常量静态成员(non-const static data member)

非常量静态成员函数不可以在类中初始化,一定要在类外把类名作为命名空间而初始化,但放在private里又只能在类里初始化,这种操作是无法实现。...但C++支持在类里定义非常量静态成员函数,如"static double average(){...};"。 误区二:在函数体内对非常量静态成员变量初始化。...(xcode有提示)正确方法是将初始化语句放到函数体外定义(在类中只有声明),然后在函数内以class::member方式调用。 ?...非常量静态成员错误使用方法 综上,非常量静态成员变量需要在类public中声明,在函数体外类外定义,以classname::member方式使用。...参考资料:声明、定义、初始化、赋值区别

6K30
  • C++中const和非const对象分别调用const和非const成员函数

    一、先来提出问题 const对象可以调用非const成员函数吗? 非const对象可以调用const成员函数吗? const成员函数内可以调用其它const成员函数吗?...非const成员函数内可以调用其他const成员函数吗?...5、const成员函数不能调用非const成员函数 6、非const成员函数可以调用非const成员函数 我们知道c++在类成员函数中还会隐式传入一个指向当前对象this指针,所以在test类中,...* this; 是和void print() const;中this指针类型是一样,所以常量对象可以调用const成员函数。...否则报编译错误, error C2662: 'UIRect::GetWidth' : cannot convert 'this' pointer from 'const UIRect' to 'UIRect

    1.3K20

    C++中const成员变量和成员函数

    初始化 const 成员变量只有一种方法,就是通过构造函数初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数const 成员函数可以使用类中所有成员变量,但是不能修改它们值,这种措施主要还是为了保护数据而设置const 成员函数也称为常成员函数。...需要强调是,必须在成员函数声明和定义处同时加上 const 关键字。...最后再来区分一下 const 位置: 函数开头 const 用来修饰函数返回值,表示返回值是 const 类型,也就是不能被修改,例如const char * getname()。...函数头部结尾加上 const 表示常成员函数,这种函数只能读取成员变量值,而不能修改成员变量值,例如char * getname() const

    25730

    C++中constCconst使用对比

    大家好晚上好,今天给大家分享是,c++中const使用,在我们以前学习c语言时候,我们已经接触了const用法,那么在c++中,const使用,又会有什么样不同呢?...超实用const用法 二、c++中const用法: 既然今天主题是C++中const用法,想都不用想,c++中const用法和c语言里面的const用法肯定有不一样地方,下面我们来看具体用法...;同时细心你可能发现,怎么在哪个函数里面有一个宏定义啊;平时大家可能见比较多是,宏定义都是写在最前面,这里不要奇怪,因为编译在编译到这里时候,只是把宏定义换成了"a=3",而且还要注意上面const...于是乎我把上面的那个g()函数里面的注释拿掉,再进行编译: #include void f() { #define a 3 const int b...四、总结: 1,与 C 语言不通,C++ 中 const 不是只读变量; 2,C++ 中 const 是一个真正意义上常量; 3,C++ 编译器可能会为 const 常量非配空间; 4,C+

    63430

    C语言中static,const和static const 区别

    1.const规定了一个变量在它初始化值之后,值不能再改变,也就是只读。 来看个例子: ?...在这个测试程序里,我试图在初始化变量c值之后再修改c值,编译直接报错,告诉我c已经是一个只读变量了,不可以改值。...2.static在函数时候,表明这个变量在函数生命周期结束之后也不会被释放。 ?...第二次调用test()时如果是普通变量,则会被重新分配内存,但static类型变量上次执行test函数之后没有被释放,而是保存在全局变量区,所以继续加一变成2。...对比一下非static变量会怎样: ? 3.static在函数时候,表明这个变量作用域只在该.c文件里,不能作用于整个工程。

    4K10

    C++】C++ 类中 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

    一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...void fun(int age, int height) const const 修饰是 fun 函数 第一个参数 Student* pThis 指针指向内存空间 ; C++ 编译器会将 void...fun(int age, int height) 函数转为对应 C 语言函数 Student_fun(Student* pThis, int age, int height) 使用 const 修饰函数...函数 第一个参数 Student* pThis 指针指向内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int age.../ // const 修饰是 fun 函数 第一个参数 Student* pThis 指针指向内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student

    20420

    【玩转腾讯云】C++学习笔记-函数const,new,delete

    一、函数const 加入函数const意思是你不能修改参数,只能读取; 函数const格式是:[返回值] [函数名](参数列表)const{}; 在外调用这类函数也分为 const 类名 对象名(参数初值...)和 类名 对象名(参数初值)调用区别如下表: 类名前面无const 类名前面有const函数const 可调用 可调用 无函数const 可调用 不可调用 再者,函数签名是包括const,所以有无函数...const同名函数是可以同时存在。...; //对象z1,无可厚非是输出有函数const那一个函数,但是对象z呢?...//其实在C++语言有个规则,前面无const会优先调用无函数const,而不是调用两个 二、new,delete 1、new,delete动作拆解 //比如Zyf *z2 = new Zyf("ss

    41911

    c++ const放置位置

    是采用const T& t还是 T const& t呢 是采用int* a 还是int *a呢 我在看《C++ Templates中文版》时,它里面特别提到要使用 int const 这种定义,函数参数定义也是这个写...T addValue(T const& x) {      // } 如果是string类型,它是这样写string const& str 这种写法也我觉得很怪异,特别是我见到大多数C++不是这样定义...C习惯 int *ptr,说明*ptr是一个int类型,ptr是指定int一个指针 int const *ptr 说明*ptr是一个常量,一个int型常量 int * const ptr  ptr...在 p之前,说明它是一个(常量)指针,其值是不能变化 最近在看《C++编程思想》里面单独有一章写const,刚看一点就联想起之前看C++ Template中文》后有些困惑。...里面提到CC++在const处理上还是有区别的,这里我还没完全理解透彻,等完全搞明显了可能会再写一篇文章。

    1.9K10

    Scala学习之相同函数

    今天在看别人代码时,发现他在类中定义了两个名字一模一样函数,但是我还以为他写错了。当我以Python思维去看待这们语言时,当然是在作死边缘了。...这两个函数功能一样,但是接受参数不一样,所以这才需要去定义两个函数。(试想一下,在Python中如何去实现) 可能你不懂Scala,让我简单跟你讲一下。...首先我们使用def关键字定义了一个名为readConfig函数,和Python一模一样;然后就是函数接受参数了,可以看到在每个参数后面有冒号,这个冒号就表示前面的数据类型,比如定义一个相加函数 object...(如果是Unit则不用返回任何数据,和Java类似) 是不是很好理解,在调用函数时,只要我们传递第一个参数是不同类型,就会使用相应函数。...都说Scala是一种函数式语言,函数是 Scala 语言核心,看看Scala函数特性,不说了,继续撸Scala了。 ?

    69030

    学过 C++ 你,不得不知这 10 条细节!

    我在阅读 《Effective C++ (第三版本)》 书时做了不少笔记,从中收获了非常多,也明白为什么会书中前言第一句话会说: 对于书中「条款」这一词,我更喜欢以「细节」替换,毕竟年轻我们在打...虽然语法有一点点奇特,但「运用 const 成员函数实现 non-const 孪生兄弟 」技术是值得了解。...需要注意是:我们可以在 non-const 成员函数调用 const 成员函数,但是不可以反过来,在 const 成员函数调用 non-const 成员函数调用,原因是对象有可能因此改动,这会违背了...当 constnon-const 成员函数有着实质等价实现时,令 non-const 版本调用 const 版本可避免代码重复。...非正式说法或许比较传神:在基类构造期间,virtual 函数不是 virtual 函数相同道理,也适用于析构函数

    74420

    C++ const常量对象、常量成员函数和常引用

    — 1 — 常量对象 如果不希望某个对象值被改变,则定义该对象时候可以在前面加 const 关键字。...--- — 2 — 常量成员函数 在类成员函数后面可以加 const 关键字,则该成员函数成为常量成员函数。...这里有两个需要注意点: 在常量成员函数中不能修改成员变量值(静态成员变量除外); 也不能调用同类 非 常量成员函数(静态成员函数除外)。...不能通过常引用,修改其引用变量const int & r = n; r = 5; // error n = 4; // ok!...可以用对象常引用作为参数,如: class Sample { ... }; void Func(const Sample & o) // 对象常引用作为参数 { ... } 这样函数中就能确保不会出现无意中更改

    1.4K20

    关于C++ const 全面总结

    大家好,又见面了,我是全栈君 C++中const关键字使用方法很灵活,而使用const将大大改善程序健壮性,本人依据各方面查到资料进行总结例如以下,期望对朋友们有所帮助。...ConstC++中经常使用类型修饰符,常类型是指使用类型修饰符const说明类型,常类型变量或对象值是不能被更新。 一、Const作用 例如以下表所看到: No....void function(const char* Var); c.參数指针本身为常量不可变(也无意义,由于char* Var也是形參) void function(char* const Var)...c.int* const fun3() //调用时 int * const pValue = fun2(); //我们能够把fun2()看作成一个变量...} (2)const修饰成员函数 const修饰类成员函数,则该成员函数不能改动类中不论什么非const成员函数

    76530
    领券