C语言基础学习笔记(9):指针

C语言基础学习笔记(9):指针

图:土星光环

Guderian出品

请把本文与本文与一篇上古时期的佛经C++的指针变量进行对比参考🕮

  1. int *a*a有着巨大的差别:int *a是定义一个指向int类型数据的指针a*a是对指针a解引用(Pointer Dereference),*a*即为指针a所指向的内存地址上存储的数据。如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    int main()
    {
    int a = 0, b = 1;
    int *pa, *pb;
    //不能写成int* pa, pb,这样只表示pa是一个指针变量,pb是一个整型变量
    pa = &a;
    pb = &b;
    printf("a=%d, b=%d\n", a, b);
    printf("*pa=%d, *pb=%d\n", *pa, *pb);
    return 0;
    }

    输出结果为:

    1
    2
    a=0, b=1
    *pa=0, *pb=1
  2. C语言中,只要pa指向a,*pa就是a的别名。

  3. 指针变量的一大应用就是用作函数参数,这样做的好处就是可以再被调函数中改变实参的值。比如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    void Func(int *par);
    int main()
    {
    int arg = 1;
    printf("arg = %d\n", arg);
    Func(&arg);
    printf("arg = %d\n", arg);
    return 0;
    }
    void Func(int *par)
    {
    printf("par = %d\n", *par);
    *par = 2;
    }

    输出结果为:

    1
    2
    3
    arg = 1
    par = 1
    arg = 2
  4. 函数指针(Function Pointer):就是指向函数的指针变量

    数据类型 (*指针变量名)(形参列表)

  5. 函数指针示例:

    若有函数原型:int Func(int a, int b);

    则可定义函数指针int (*f)(int, int);

    f = Func;就是让f指向函数Func()

    • 编译器将不带()的函数名解释为该函数的入口地址
    • 函数指针变量存储的是函数在内存中的入口地址
  6. 正确写法int (*f)(int, int);。常见错误:

    (1)忘了写前一个()int *f(int, int);,等价于声明了一个函数名为f、返回值是整型指针类型的函数;

    (2)忘了写后一个()int (*f);,等价于定义了一个整型指针变量

看完再看:C++的指针变量


【更多C语言系列】

本文标题:C语言基础学习笔记(9):指针

文章作者:G-SS-Hacker

发布时间:2020年02月22日 - 08:58:56

最后更新:2020年02月22日 - 08:59:38

原始链接:https://G-SS-Hacker.github.io/C语言基础学习笔记(9):指针/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。