C++ 函数形参里的const char作为返回值问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 函数形参里的const char作为返回值问题相关的知识,希望对你有一定的参考价值。

char * strFind(const char * str,const char * substr)

int i,j;
int m= strlen(str);
int n= strlen(substr);
for ( i=0;i<=m-n;++i)

for ( j=0;j<n;++j)

if(str[i+j]!=substr[j])break;

if (j==n)

return str+i;


return NULL;

VC++6.0的环境。会提示无法将const char*转换成char*。去掉形参里的const修饰就没有问题。为什么。返回的话没有修改吧。吧str+i改成str同样不行。

形参是char *类型,实参是cons chart *类型时,编译程序会给出错误信息,意思是被调函数可以改变串的内容,而实参又是const类型,这样的实参不允许改变,二者之间不能融合,即使函数不改变形参的内容也不行。

但形参是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(substr);
for(i = 0; i <= m - n;++i) 
for(j = 0;j < n;++j) 
if(str[i + j] != substr[j]) break;

if(j == n) 
return str + i;


return NULL;


int main() 
char s[] = "please sit down.";
char t[] = "down";
const char *pstr = strFind(s,t);
if(pstr) printf("Yes.\\n");
else printf("No.\\n");
return 0;

参考技术A 第一个函数,因为传入的变量是一个常量不能被修改,而参数是可以修改的,所以报错。
第二个函数,因为参数表身表明不可修改,所以变量是不是变量就无所谓了,都不会被修改。不会报错。

这实际上和普通的思维逻辑是一致的。

计算形参s所指字符串中包含的单词个数,作为函数值返回

#include<stdio.h>
#include<string.h>
int fun(char *s)

	int count=0;
	int flag=0;     //声明标志
	while(*s!=‘\0‘)
	
		if(*s!=‘ ‘ && flag==0)
		
			count++;
			flag=1;
		
		if(*s==‘ ‘)   //当字符串出现空格,将flag置0,则可进入第一个if语句,单词个数加1
			flag=0;
		s++;
	
	return count;

void main()

	char s[81];
	printf("Please input a string:");
	gets(s);
	printf("The string have %d word\n",fun(s));

  

以上是关于C++ 函数形参里的const char作为返回值问题的主要内容,如果未能解决你的问题,请参考以下文章

C#中的const形参

java 强制类型转换的规则是啥?

传引用作为形参和返回值_节省参数拷贝的时间

c++关于派生类的拷贝构造函数

计算形参s所指字符串中包含的单词个数,作为函数值返回

C:函数 注意点