C++常用的函参类型解析

来源:互联网 发布:网络布线按米收费吗 编辑:程序博客网 时间:2024/05/16 08:26

在编写C ++代码时,经常会使用不同的参数类型作为函数的参数来传递信息。本文主要讨论int型,string型,以及整型数组、字符串型数组作为函数的参数时,需要注意的问题。其中可能会有很些细节笔者在文中并为涉及,还请读者改正及完善。(本文并未讨论传值与传引用的区别,因为这部分内容不容易理解,笔者在后面会单独进行讲解)

函数参数为int型。这是最简单也是最容易理解的一种参数类型。下面看一个简单的程序:


程序中,通过函数参数的形式,将a,b的值传递给函数Add。

函数参数为string型。当函数参数为string型时,需要注意形参与实参的表示形式。下面看一段简单的代码:

void ShowString(string const &str)
{
cout<<str<<endl;
}
void main()
{
string str;
printf("请输入要显示的字符串:");
getline(cin, str);
ShowString(str);
return;
}

在C++中,string表示一种库类型,表示可变长字符序列。因为string可视为指针,那么,如果指针作为参数,则传递的参数只能按引用传递。所以,如果将代码改为             void ShowString (string const str),则会出错。

函数参数为整型数组或字符串型数组。当函数参数为数组时,需要注意形参中的数组名相当与数组的首地址。下面看一段代码:

void Update_SMIL(string const &program_name , string const src[] , string const bit[] , int n)
{
ofstream ReadInFile;
ReadInFile.open("SMIL.txt",ios::trunc); ////ios::trunc表示在打开文件前将文件清空,由于是写入,文件不存在则创建
if(ReadInFile.is_open())
{
ReadInFile<<"<?xml version=\"1.0\"?>\n"<<"<!DOCTYPE smil PUBLIC \"-//W3C//DTD SMIL 2.0//EN\"\n";
ReadInFile<<"\"http://www.w3.org/TR/html4/loose.dtd\">\n"<<"<smil xmlns=\"http://www.w3.org/2001/SMIL20/Language\">\n";
ReadInFile<<"  "<<"<head>\n"<<"    "<<"<meta name=\"category\" content="<<"\""<<program_name<<"\""<<"/>""\n";
ReadInFile<<"    "<<"<meta name=\"httpBase\" content=\"http://hkjc-f.akamaihd.net/\"/>\n";
ReadInFile<<"    "<<"<meta name=\"rtmpAuthBase\" content=\"hdflash_base_url\"/>\n";
ReadInFile<<"    "<<"<meta name=\"vod\" content=\"true\"/>""\n";
ReadInFile<<"  "<<"</head>\n";
ReadInFile<<"  "<<"<body>\n";
ReadInFile<<"    "<<"<switch id="<<"\""<<program_name<<"\""<<">\n";
for(int i = 0; i < n; i++)
{
ReadInFile<<"      "<<"<video\n";
ReadInFile<<"src="<<"\""<<src[i]<<"\""<<" "<<"system-bitrate="<<"\""<<bit[i]<<"\""<<"/>\n";
}
ReadInFile<<"    "<<"</switch>\n";
ReadInFile<<"  "<<"</body>\n";
ReadInFile<<"</smil>\n";
}
ReadInFile.close();
return;
}


void main()
{
string program_name;
int n;
printf("请输入program_name:");
getline(cin,program_name);
string src[5] = {"abc", "bcd", "adf", "sfsd"};
string bit[5] = {"2213214", "324425", "32415", "452345"};
printf("请输入video的个数:");
scanf_s("%d", &n);
Update_SMIL(program_name, src, bit, n);
return;
}

上面这段代码中,src和bit为字符串型数组,在使用数组作为函数参数的时候,可以借鉴上述代码中的形式。数组有两个特殊的性质:不允许拷贝数组以及使用数组时会将其转换成指针。因为不能拷贝数组,所以我们无法以值传递的方式使用数组形参。因为数组会被转换成指针,所以当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。

尽管不能以值传递的方式传递数组,但是我们可以把形参写成类似数组的形式,以下三种表示方式都是等价的:

void print(const int*);

void print(const int[]);

void print(const int[10]); //这里的维度可以表示我们期望数组含有多少元素

以上三个函数是等价的,每个函数的唯一形参都是const int*类型的。

0 0
原创粉丝点击