为什么不对类型为基本类型的函数参数使用const限定符
const一般应用于指针,由于指针按地址传递,可以更改原始数据,加上const可以防止原始数据被修改
而基本类型的数据是按值传递的,函数调用时使用的是其副本,不会更改原本的值
编写一个函数,其原型如下:
int replace (char*str, char c1, char c2);
该函数将字符串中所有的c1都替换为c2,并返回替换次数。
#include <iostream>
using namespace std;
int replace(char *str, char c1, char c2);
int main()
{
int n;
char a[] = "hello world!";
n=replace(a, 'o', 'z');
cout << a<<endl<<n<<endl;
return 0;
}
int replace(char *str, char c1, char c2)
{
int cnt = 0;
while (*str)
{
if (*str == c1)
{
*str = c2;
cnt++;
}
str++;
}
return cnt;
}
或
int replace(char*str, char c1, char c2)
{
int number = 0;
for( ;str[0]!='\0';str++)
{
if (str[0] == c1)
{
str[0]=c2;
number++;
}
}
return number;
}
何时使用引用参数使用引用参数的主要原因有两个:
1、程序员能够修改函数中的数据对象。
2、通过传递引用而不是整个数据对象,可以提高程序的运行速度
对于使用传递的值而不做修改的函数:
1、如果数据对象很小,如内置数据类型或小型结构,则按值传递。
2、如果对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针。
3、如果数据对象是较大的结构,则使用const 指针或const引用,以提高程序的效率。
4、如果数据对象是类对象,则使用const引用。类设计的语义常常要求使用引用,这是c++增加这个特性的主要原因,因此传递类对象标准方式是按引用传递。
对于修改调用函数中数据的函数:
1、如果数据对象是内置数据类型,则使用指针,如果看到诸如fixit(&x)这样的代码
2、如果数据对象是数组,则只能使用指针。
3、如果数据对象是结构,则使用引用或指针。
4、如果数据对象是类对象,则使用引用
综上:对于传递参数为类对象的时候,应该使用引用,只是这个引用时const与非const的区别。
下面是一个结构声明:
struct box
{
char maker[40];
float height;
float width;
float length;
float volume;
};
a。编写一个函数,按值传递box结构,并显示每个成员的值。
b。编写一个函数,传递box结构的地址,并将volume成员设置为其他三维长度的乘积。
c。编写一个使用这两个函数的简单程序。
a.#include <iostream>
using namespace std;
struct box
{
char maker[40];
float height;
float width;
float length;
float volume;
};
void show(box b)
{
cout << b.height << ' ' << b.width << ' ' << b.length << ' ' << b.volume << endl;
}
int main()
{
box b =
{
"liming",
40,
20.2,
10.5
};
show(b);
return 0;
}
b.
#include <iostream>
using namespace std;
struct box
{
char maker[40];
float height;
float width;
float length;
float volume;
};
void show(box *b)
{
cout << b->height << ' ' << b->width << ' ' << b->length << ' ' << b->volume << endl;
}
int main()
{
box b =
{
"liming",
40,
20.2,
10.5
};
show(&b);
return 0;
}
#include<iostream>
using namespace std;
struct box
{
char maker[40];
float height;
float width;
float length;
float volume;
};
void volume(box*); //用于计算volume值
void show(box); //用于显示值
int main()
{
box player;
cout << "请输入名字: ";
cin.getline(player.maker, 39);
cout << "请输入高度: ";
cin >> player.height;
cout << "请输入宽度: ";
cin >> player.width;
cout << "请输入长度: ";
cin >> player.length;
volume(&player);
show(player);
system("pause");
return 0;
}
void volume(box*player)
{
player->volume = player->height*player->width*player->length; //是三个数的乘积
}
void show(box player)
{
cout << "名字: " << player.maker << endl;
cout << "高度: " << player.height << endl;
cout << "宽度: " << player.width << endl;
cout << "长度: " << player.length << endl;
cout << "体积: " << player.volume << endl;
}