带有示例的C++指针

发布于:2021-01-28 13:40:31

0

156

0

C++ 指针 什么是指针?

什么是指针?

在C++中,指针是指保存另一变量地址的变量。与正则变量一样,指针也有数据类型。例如,整型指针可以保存整型变量的地址。字符型指针可以保存字符型变量的地址。

您应该将指针视为内存地址的符号表示。通过指针,程序可以通过引用模拟调用。它们还可以创建和操作动态数据结构。在C++中,指针变量是指指向另一变量指向的内存中的特定地址的变量。

 C++中的地址

为了理解C++指针,必须了解计算机如何存储数据。

当你在C++程序中创建变量时,它会给计算机内存分配一些空间。此变量的值存储在指定的位置。

为了知道数据存储在计算机内存中的位置,C ++提供了&(引用)运算符。操作员返回变量占用的地址。

例如,如果x是变量,&x返回变量的地址。

指针声明语法

C++声明采用以下语法:

    datatype *variable_name;

  • 数据类型是指针的基本类型,必须是有效的C ++数据类型。

  • variable_name是指针变量的名称。

  • 上面用于指针声明的星号类似于用于执行乘法运算的星号。星号将变量标记为指针。

这是C++中有效指针声明的一个例子:

    int    *x;    // a pointer to integer
    double *x;    // a pointer to double
    float  *x;    // a pointer to float
    char   *ch     // a pointer to a character

    引用运算符(&;)和遵从运算符(*)

    引用运算符(&;)返回变量的地址。

    解引用运算符(*)帮助我们获取存储在内存地址中的值。

    例如:

    如果我们有一个名为num的变量,存储在地址0x234中,并存储值28。

    引用运算符(&;)将返回0x234。

    解引用运算符(*)将返回5。

    例1:

    #include <iostream>
    int main() {
    int  x = 27;  
    int  *ip;        
    ip = &x;      
    cout << "Value of x is : ";
    cout << x << endl;
    cout << "Value of ip is : ";
    cout << ip<< endl;
    cout << "Value of *ip is : ";
    cout << *ip << endl;
    return 0;
    }

    输出:

     

    工作原理:

     

    以下是代码截图:

     

    代码说明:

  1. 导入iostream头文件。这将允许我们使用头文件中定义的函数而不会出错。

  2. 包含std名称空间以使用其类而不调用它。

  3. 调用main()函数。程序逻辑应添加在此函数体中。{标记函数体的开始。

  4. 声明一个整数变量x并将其赋值为27。

  5. 声明指针变量*ip。

  6. 将变量x的地址存储在指针变量中。

  7. 在控制台上打印一些文本。

  8. 在屏幕上打印变量x的值。

  9. 在控制台上打印一些文本。

  10. 打印变量x的地址。地址值存储在变量ip中。

  11. 在控制台上打印一些文本。

  12. 打印存储在指针地址的值。

  13. 程序成功执行后应返回值。

  14. main()函数主体的结尾。

    指针和数组

    数组和指针基于相关概念工作。在使用具有指针的数组时,需要注意的事情不尽相同。数组名称本身表示数组的基址。这意味着要将数组地址分配给指针,不应使用与号(&;)。

    例如:

    p = arr;

    以上是正确的,因为arr表示数组的地址。下面是另一个例子:

    p = &arr;

    以上不正确。

    我们可以隐式地将数组转换为指针。例如:

    int arr [20];
    int * ip;

    以下是有效操作:

    ip = arr;

    在上述声明之后,ip和arr将是等价的,并且它们将共享属性。但是,可以将不同的地址分配给ip,但我们不能将任何内容分配给arr

    例2:

    此示例演示如何使用指针遍历数组:

    #include <iostream>
    int main() {
    int *ip;
    int arr[] = { 10, 34, 13, 76, 5, 46 };
    ip = arr;
    for (int x = 0; x < 6; x++) {
    cout << *ip << endl;
    ip++;
    }
    return 0;
    }

    输出:

     

    以下是代码截图:

     

    代码说明:

  1. 声明整数指针变量ip。

  2. 声明一个名为arr的数组,并在其中存储6个整数。

  3. 将arr分配给ip。ip和arr将变得等效。

  4. 创建for循环。创建循环变量x是为了迭代索引0到5的数组元素。

  5. 打印存储在指针IP地址的值。每次迭代将返回一个值,总共重复6次。Endl是一个C++的关键字,它是结束线。此操作允许您在打印每个值后将光标移动到下一行。每个值将打印在一行中。

  6. 在每次迭代后将指针移动到下一个int位置。

  7. 循环结束。

  8. 程序必须在成功执行时返回某些内容。

  9. main()函数体的结尾。

    空指针

    如果没有要分配的确切地址,则可以为指针变量分配NULL。应该在申报的时候做。这种指针称为空指针。它的值为零,并且在许多标准库(如iostream)中定义。

    例3:

    #include <iostream>
    int main() {
    int  *ip = NULL;
    cout << "Value of ip is: " << ip;
    return 0;
    }

    输出:

     

    以下是代码截图:

     

    代码说明:

  1. 声明指针变量ip并为其赋值NULL。

  2. 在控制台上打印指针变量ip的值和一些文本。

  3. 程序成功完成后必须返回值。

  4. main()函数主体的结尾。

    变量指针

    C++,可以直接从计算机的内存中操作数据。

    可以根据需要分配或重新分配存储空间。这是通过指针变量实现的。

    指针变量指向计算机内存中由另一个变量指向的特定地址。

    可声明如下:

    int *p;

    或者

    int* p;

    在you示例中,我们声明了指针变量p

    它将保存一个内存地址。

    星号是解引用运算符,表示指向的指针。

    指针p指向内存地址中的整数值。

    例4:

    #include <iostream>
    int main() {
    int *p, x = 30;
    p = &x;
    cout << "Value of x is: " << *p;
    return 0;
    }

    输出:

       

    以下是代码截图:

     

    代码说明:

  1. 声明一个指针变量p和一个值为30的变量x。

  2. 将变量x的地址指定给p。

  3. 在控制台上打印指针变量p的值和一些文本。

  4. 程序成功完成后必须返回值。

  5. main()函数主体的结尾。

    指针的应用

  • <> C++中的函数只能返回一个值。此外,函数中声明的所有变量都在函数调用堆栈中分配。一旦函数返回,所有堆栈变量都将被销毁。


  • 函数的参数是通过值传递的,对变量所做的任何修改都不会改变传递的实际变量的值。下面的例子有助于说明这一点概念:-

    例5:

    #includeusing namespace std;
    void test(int*, int*);
    int main() {
    int a = 5, b = 5;
    cout << "Before changing:" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    test(&a, &b);

    cout << "nAfter changing" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
    }

    void test(int* n1, int* n2) {
    *n1 = 10;
    *n2 = 11;
    }

    输出:

       

    以下是代码截图:

       

    代码说明:

  1. 创建一个名为test的函数原型,该函数将接受两个整数参数。

  2. 调用main()函数。我们将在其主体中添加程序逻辑。

  3. 声明两个整型变量a和b,每个变量的值为5。

  4. 在控制台上打印一些文本。endl(结束行)将移动光标开始下一行的打印。

  5. 在控制台上将变量a的值与其他文本一起打印。endl(结束行)将移动光标开始下一行的打印。

  6. 在控制台上打印变量b的值和其他文本。endl(结束行)将移动光标开始下一行的打印。

  7. 创建一个名为test()的函数,将变量a和b的地址作为参数。

  8. 在控制台上打印一些文本。在打印文本之前,| n将创建一个新的空行。文本打印后,endl(结束行)将移动光标开始下一行的打印。

  9. 在控制台上将变量a的值与其他文本一起打印。endl(结束行)将移动光标开始下一行的打印。

  10. 在控制台上打印变量b的值和其他文本。endl(结束行)将移动光标开始下一行的打印。

  11. 程序成功完成后必须返回值。

  12. main()函数主体的结尾。

  13. 定义函数test()。函数应该采用两个整数指针变量*n1和*n2。

  14. 将指针变量*n1赋值为10。

  15. 将指针变量*n2赋值为11。

  16. 函数测试()正文结束。

    即使在函数测试中为变量a和b分配了新的值,但一旦函数调用完成,外部函数main也不会反映出相同的值。

    使用指针作为函数参数有助于在函数中传递变量的实际地址,对变量执行的所有更改都将反映在外部函数中。

    在上述情况下,函数“test”具有变量“a”和“b”的地址。这两个变量可以从函数“test”直接访问,因此对这些变量所做的任何更改都会反映在调用方函数“main”中

    使用指针的优点

    下面是使用指针的优点/好处

    • 指针是存储C++中其他变量地址的变量。

    • 函数可以使用指针修改和返回多个变量。

    • 可以使用指针动态分配和取消分配内存。

    • 指针有助于简化程序的复杂性。

    • 使用指针可以提高程序的执行速度。

    总结:

  • 指针是指保存另一个变量地址的变量。

  • 每个指针都有一个有效的数据类型。

  • 指针是内存地址的符号表示。

  • 指针允许程序模拟引用调用,并创建和操作动态数据结构。

  • 数组和指针使用相关概念。

  • 数组名称表示数组的基。

  • 如果要将数组地址分配给指针,请不要使用与号(&;)。

  • 如果没有指定的地址来指定指针变量,请将其指定为NULL。