C++,const型指针变量做形参实参变量的问题

1、允许形参和实参都是const型的指针变量
2、允许形参和实参都是非const型的指针变量
3、不允许形参是const型指针变量,而实参是非const型指针变量,因为在函数执行过程中,形参的值是可以变化的,而形参和实参指向的都是同一单元。
4、允许形参是const型的指针变量,而实参是非const型的指针变量。

这是谭浩强C++上面的原话,我对前面三条都可以理解。第四条不可以理解。
我认为,在程序执行过程中,实参也可以发生变化,比如再次调用函数(形参所在的函数)的时候,实参就可以发生改变了。或者在使用递归的时候实参不是都在变化吗?
所以第四点就不成立了。

你这里const型的指针变量是指:常指针,还是 指向常对象的指针变量?
应该是指:指向常对象的指针变量
这样的话,应该是如下的情况:
1、允许形参和实参都是const型的指针变量
2、允许形参和实参都是非const型的指针变量
3、允许形参是const型指针变量,而实参是非const型指针变量
4、不允许形参是非const型的指针变量,而实参是const型的指针变量。(原因在于指向非const型变量的指针变量只能指向非const的对象)
你的3、4的情况是一样的,是不是打错了?
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-27
第四条的翻译函数为:void fun(int * const a);const修饰的指针变量a,表示a是const型的,意思是在函数体中,a的值(注意a是个指针)是不可以改变的。如果你在函数体中改变a的值,例如int temp=9;a=&temp;这样的操作是编译出错的。
但是至于你给a传递什么参数就无所谓了,不管是const类型的指针,或是非const类型的指针,都无所谓。它约束的只是在函数体内部的形参临时变量。
第2个回答  2011-11-10
第四点的const你理解为,作为参数的指针不可以被改变即可,因为要是被调用的函数随便改了,岂不是出问题了,所以这个参数形式是const型的,而你调用是,随便传,比如函数显示textbox的值,你可以把textbox1的指针传给他,也可以把textbox2的指针传参,这2个textbox不就是实参嘛,而函数定义的,就是const的形参本回答被提问者采纳
第3个回答  2011-11-10
如果函数带有指向const类型的指针-- 那么这种函数可以接收const类型的实参或者非const类型的实参,并且不能改变指针变量所指向变量的值,也就是不可以对实参内容作出更改. 。
第4个回答  2011-11-10
4、允许形参是const型的指针变量,而实参是非const型的指针变量。
const型的指针变量所指向的地址没有变,
指针不关心它所指向的内存地址块中存的是什么,它只关心内存地址 。

C++,错误:"const char *"类型的实参与"char *类型的形参不兼容"
这是说明类型不兼容,强制转类型。在声明变量 char* 时改成 const char *即可。当用户想在.h声明中定义成员变量,有时会报类型重定义错误,如果不是工程中真的重复定义了多个同名类,那么多半是没有给该类的头文件加条件指示符#ifndef。条件指示符#ifndef 最主要的目的就是防止头文件的重复包含和编...

C++指针、数组、引用、变量作函数参数的问题
1, 变量作为参数,这是单向值传递。即将数据传给被调函数后,与调用函数就不相关了,必须通过函数值返回操作结果。如有函数声明:void swap(int a,int b); \/\/功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。2. 指针、数组...

c++中 , 实参和形参的区别是什么?
有以下区别:1、主体不同:实参在调用有参函数时,函数名后面括号中的参数为“实际参数”。形参不是实际存在变量,又称虚拟变量。2、目的不同:实参可以是常量、变量或表达式,无论实参是何种类型的量,在进行函数调用时,都必须具有确定的值,以便把这些值传送给形参。需要注意当形参和实参不是指针类型...

C++字符串小问题,请大家帮个忙,很简单
这个是要把数组传递给子函数操作,实际上只能传递的是该数组的指针,也就是子函数的数组指针指向的内容和主函数的是同一个,在子函数里修改其内容就是更改主函数里数组的内容。把形参设置成const,子函数就无权中修改其内容,保护了数据的安全性。所以在写传给子函数指针型数据时,如果不想(或不能)...

C++中,数组问题.
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;(3)在一个函数声明中,const可以修饰形参,表明它是一个输入...

在c++中,什么是形参,什么是实参。有何区别吗
1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值...

C++返回值为Const &的看法大虾给解释下
关于引用形参和const引用形参的问题我想楼下解释的和楼主理解的已经差不多了。引用形参不会复制传入的实参,而可以在函数内部修改实参。至于const引用,是告诉程序,我们不应该在函数内部修改传入的实参。那么为什么有的时候用引用形参有的时候用const引用形参呢?我会和第二个问题一起回答。关于返回值是引用...

c++中函数实参和形参的区别有哪些?
代码在编译时会出现 error C2664: 'InsertSort' : cannot convert parameter 1 from 'int' to 'int []'这是因为用数组名做函数实参时,向形参(数组名或指针变量)传递的是数组首元素地址,因此对参数的类型做一下改变,如下图所示:

C++中函数的const参数一定要传入const实参吗?
要注意unsinged char、signed char、char在C++中是不同的三种类型,char的算术运算结果类似unsigned还是signed,由实现(编译器)决定。ISO C允许不同类型指针的隐式转换,包括参数传递时实参向形参类型的转换。但是ISO C++对于类型检查更严格,必须使用显式的类型转换。

C++ 函数形参里的const char作为返回值问题
但形参是const char *,实参是 char *是可行的,当要返回形参指针时,其返回类型必须是const char *。\/ Yes.Press any key to continue \/ include <stdio.h>#include <string.h>const char *strFind(const char *str,const char *substr) {int i,j;int m = strlen(str);int n = strlen...

相似回答