• 指针使用前应先初始化


    转载自:http://blog.csdn.net/lihaoweiv/article/details/7027521


    使用未初始化的指针是非常危险的。通过一个未初始化的指针会很容易覆盖随机的内存区域。造成的损害取决于如何倒霉,所以初始化指针不仅仅是一个好主意。通过指向一个已经被定义变量的地址 很容易初始化一个指针。以下可以看到,通过使用运算符 & 及变量的名称来用变量number的地址对指针pnumber进行初始化:


    int number = 0;                  // Initialized integer variable
    int* pnumber = &number;          // Initialized pointer

    用另一个变量的地址初始化指针时, 请记住必须在指针声明之前声明该变量。

    当然,可能不希望在声明指针时初始化为特定变量的地址。 在这种情况下可以将其初始化为等效为零的指针。为此,Visual c + + 提供了已定义为 0的符号 NULL,因此可以使用下面的语句声明并初始化一个指针,而不是上一个示例中那样:

    int* pnumber = NULL;             // Pointer not pointing to anything

    这可以确保指针不包含一个有效的地址,并且给指针提供一个值,使可以在 if 语句中进行检查,例如:

    if(pnumber == NULL)
    cout << endl << “pnumber is null.”;

    当然,也可以显式初始化为0,这也保证了它被分配一个值而不指向任何一个指针。没有对象可被分配到地址0,这样的效果是,0用作地址指针表明该指针没有目标。可以说它的清晰程度稍差,如果代码可能使用其他编译器,最好是将为空的指针初始化值为0。在ISO / ANSI C + +我会使用0而不是NULL来初始化一个指针变量。

    这也更符合当前 ISO/ANSI c+ +的“好习惯”, 在C++中,如果一个对象有名字,那它应该有一个类型,但是,NULL并没有类型 — — 它是 0 的别名。 在以后,会发现在C + + / CLI中有点不同。

    简单地以0对指针变量的进行初始化:

    int* pnumber = 0;                // Pointer not pointing to anything

    使用以下语句来检查一个指针变量是否包含有效的地址:


    if(pnumber == 0)
    cout << endl << “pnumber is null.”;

    以下语句也是等效的:

    if(!pnumber)
    cout << endl << “pnumber is null.”;

    该语句和前边的例子是一样的,当然也可以这样:

    if(pnumber != 0)                    // Pointer is valid, so do something useful

    值为NULL的指针指向的地址指向一个垃圾值。不应该尝试解引用一个值为NULL的指针,这将导致程序立即中止。


    Pointers to char 指向字符的指针
    指向字符的指针类型 char* 有有趣的属性,它可以被文字字符串初始化。例如,使用以下语句声明和初始化一个指针变量:

    char* proverb = “A miss is as good as a mile.”;

    这看上去和初始化一个字符数组类似,但还是有一些不同的。

    这将创建一个字符串(实际上是一个类型为const char的数组),包含字符串引号之间出现的字符以及用‘/0’终止,并将这段文本的地址存储在指针 proverb中。该文本的地址是它的第一个字符的地址。如下图所示:



  • 相关阅读:
    js常用设计模式实现(一)单例模式
    js深入(四)万脸懵圈的this指向
    js深入(三)作用域链与闭包
    js深入(二)函数的执行与上下文
    js深入(一)从原型理解原型链
    初识markdown
    git stash 用法
    见的如T、E、K、V等形式的参数常用于表示泛型形参
    SystemBarTint是两年以前的一个开源库,现在我们依然可以用它很方便的给应用加上。
    android:supportsRtl="true" 属性
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020447.html
Copyright © 2020-2023  润新知