C++ primer plus 第七章复习题部分题目

为什么不对类型为基本类型的函数参数使用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;  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值