• C 语言指针


    C 语言指针

    在本教程中,您将学习指针。什么是指针,如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。

    指针是 C和C ++ 编程的强大功能。在学习指针之前,让我们学习一下C语言编程中的地址。

    C 语言地址

    如果程序中有变量var,则&var将在内存中提供其地址。

    使用scanf()函数时,我们已多次使用地址。

    scanf("%d", &var);
    
    • 1

    在此,用户输入的值存储在var变量的地址中。让我们举一个可行的实例。

    #include 
    int main()
    {
      int var = 5;
      printf("var: %d\n", var);
    
      // 注意在var之前使用&
      printf("address of var: %p", &var);  
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    输出结果

    var: 5 
    var地址: 2686778
    
    • 1
    • 2

    **注意:**运行上面的代码时,您可能会获得其他地址。

    C 语言指针

    指针(指针变量)是用于存储地址而非值的特殊变量。

    指针语法

    这是我们如何声明指针的方法。

    int* p;c
    
    • 1

    在这里,我们已经声明了一个int类型的指针p。

    您也可以通过以下方式声明指针。

    int *p1;
    int * p2;
    
    • 1
    • 2

    让我们再举一个声明指针的实例。

    int* p1, p2;
    
    • 1

    在这里,我们声明了一个指针p1和一个普通变量p2。

    给指针分配地址

    让我们举个实例。

    int* pc, c;
    c = 5;
    pc = &c;
    
    • 1
    • 2
    • 3

    在此,将5分配给c变量。并且,将c的地址分配给pc指针。

    获取指针所指向的值

    为了获得指针所指向的内容的值,我们使用了解引用运算符(*)。例如:

    int* pc, c;
    c = 5;
    pc = &c;
    printf("%d", *pc);   // 输出: 5
    
    • 1
    • 2
    • 3
    • 4

    此处,c的地址已分配给pc指针。为了获取存储在该地址中的值,我们使用了*pc。

    改变指针指向的值

    让我们举个实例。

    int* pc, c;
    c = 5;
    pc = &c;
    c = 1;
    printf("%d", c);    // 输出: 1
    printf("%d", *pc);  // 输出: 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    我们已经将c地址分配给了pc指针。

    然后,我们将的值更改c为1。由于pc和的地址c相同,因此*pc得到1。

    让我们再举一个实例。

    int* pc, c;
    c = 5;
    pc = &c;
    *pc = 1;
    printf("%d", *pc);  // 输出: 1
    printf("%d", c);    // 输出: 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    我们已经将c地址分配给了pc指针。

    然后,我们使用* pc = 1;将* pc更改为1。 由于pc和c的地址相同,因此c等于1。

    让我们再举一个实例。

    int* pc, c, d;
    c = 5;
    d = -15;
    
    pc = &c; printf("%d", *pc); // 输出: 5
    pc = &d; printf("%d", *pc); // 输出: -15
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    最初,使用的地址c分配给pc指针pc = &c;。因为c是5,所以*pc给我们5。

    然后,使用将地址d分配给pc指针pc = &d;。由于d是-15,所以*pc给我们-15。

    示例:指针的工作方式

    让我们举一个可行的实例。

    #include 
    int main()
    {
       int* pc, c;
       
       c = 22;
       printf("c的地址: %p\n", &c);
       printf("c的值: %d\n\n", c);  // 22
       
       pc = &c;
       printf("指针pc地址: %p\n", pc);
       printf("指针pc内容: %d\n\n", *pc); // 22
       
       c = 11;
       printf("指针pc地址: %p\n", pc);
       printf("指针pc内容: %d\n\n", *pc); // 11
       
       *pc = 2;
       printf("c的地址: %p\n", &c);
       printf("c的值: %d\n\n", c); // 2
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    输出结果

    c的地址: 003FFBF8
    c的值: 22
    
    指针pc地址: 003FFBF8
    指针pc内容: 22
    
    指针pc地址: 003FFBF8
    指针pc内容: 11
    
    c的地址: 003FFBF8
    c的值: 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    该程序的用法

    1. int* pc, c;
      将创建一个指针变量和一个普通变量。
      这里创建了一个指针pc和一个普通变量c,都是int类型。由于pc和c没有初始化在最初,指针pc指向没有地址或一个随机地址。变量c有一个地址,但包含随机的垃圾值。

    2. c = 22;
      22被分配给变量c。
      这是给变量c赋值22,也就是说,22被存储在变量c的内存中。

    3. pc = &c;
      变量c的地址分配给指针pc。
      这将变量c的地址分配给指针pc。

    4. c = 11;
      11分配给变量c。
      这将11分配给变量c。

    5. *pc = 2;
      将5分配给指针变量的地址。
      这会将指针pc指向的内存位置的值更改为2。

    使用指针时的常见错误

    假设您希望指针pc指向c的地址。 然后,

    int c, *pc;
    
    //pc是地址,但c不是
    pc = c; // Error
    
    //&c是地址,但* pc不是
    *pc = &c; // Error
    
    //&c和pc都是地址
    pc = &c;
    
    //c和*pc值
    *pc = c;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这是指针语法初学者经常会感到困惑的示例。

    #include 
    int main() {
       int c = 5;
       int *p = &c;
    
       printf("%d", *p);  // 5
       return 0; 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用时为什么没有出现错误int *p = &c;?

    这是因为

    int *p = &c;
    
    • 1

    相当于

    int *p:
    p = &c;
    
    • 1
    • 2

    在这两种情况下,我们都创建了一个指针p(不是*p)并给它赋值&c。

    为了避免这种混乱,我们可以使用如下语句:

    int* p = &c;
    
    • 1

    现在您知道了什么是指针,您将在下一个教程中学习指针与数组的关系。

  • 相关阅读:
    期中考核复现(web)
    JavaScript事件处理:探索DOM事件和事件监听器
    BEVFormer论文解析
    英文PDF怎么翻译成中文?两分钟让你学会翻译PDF
    【Python百日进阶-Web开发-音频】Day702 - librosa安装及模块一览表
    Java实现排序算法
    Xilinx FPGA DDR3设计(三)DDR3 IP核详解及读写测试
    11-2 集合之Collection接口
    WEB 自动化神器 TestCafe(一)—安装和入门篇
    2023MathorCup高校数模挑战赛B题完整解题代码教程
  • 原文地址:https://blog.csdn.net/Tom_Jerry__/article/details/134413394