指针参数传递与数据安全

知识扫盲

  • 理解常值变量和符号常量的区别

    在定义时用const修饰的普通变量称为常值变量.例如:

    const int MaxLint = 1000;

    const float Pi = 3.1415926;

    指针做函数参数时,参数的传递效率非常高,通过指针可以对指针所指内存进行读/写。
    在实际的编程中,若函数的形参为指针,则该函数只是读取指针所指内存的数据,则应将该指针用const修饰,以限制在函数体内对指针所指内存的修改。这样,即兼顾了指针参数的高效传递,又兼顾了指针所指数据的安全。如果函数的形参为引用,且该函数只是读取引用所关联的变量,则也应该采用相同的措施。

    代码示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include "iostream"
    using namespace std;
    //void sp_to_dash(const char *s)
    //{
    // while(*s)
    // {
    // if(*s == ' ') *s = '_';//添加const修饰,这里在修改指针所指变量的值时候,编译器会报错
    // cout<< *s++;
    // }
    //}
    void sp_to_dash(const char *s)
    {
    while(*s)
    {
    if(*s == ' ') cout<<'_';
    else cout<<*s;
    s++;
    }
    }
    int main()
    {
    sp_to_dash("hello !");
    cout<<endl;
    return 0;
    }