vlambda博客
学习文章列表

指针搞都不懂,好意思说自己会C语言?



C语言面试必问知识点之「指针」


一、指针相关概念

  • 指针变量


  • 指针的定义(type *变量名;)

    • int *p;

    • 表示该变量的类型是一个指针变量,指针变量名是p而不是*p

    • 如果在同一行定义多个指针变量应该是:int *p1, *p2;而不是int *p1, p2

  • 指针的初始化

    type *变量名 = 地址;


  • 例子

    #include <stdio.h>

    int main()
    {
       int a = 100;
       printf("%d\n",&a);

       int *c = &a;
       printf("%d\n",c);

       return 0;
    }



二、指针变量的使用(如何通过指针变量访问和运算)

  • 指针变量访问

    int a = 10;
    int *p = &a;
    *p = 100;
    printf("a:%d\n",a);


  • 指针运算

    #include <stdio.h>

    int main()
    {

       int a = 10;
       int *p = &a;
       printf("p:%d\n",p);
       p++;
       printf("p:%d\n",p);
       return 0;
    }


三、数组指针

  • 数组指针

    int main()
    {
       int array[5] = {1,2,3,4,5};
       printf("%d\n",&array);
       int (*p)[5] = &array;
       printf("%d\n",p);
       return 0;
    }



四、指针数组

  • 指针数组

    指针数组,就是存放指针的数组,数组里的元素都是指针,在定义指针数组时,不需要加上(),不然就是定义数组指针

    int main()
    {
       int array[5] = {1,2,3,4,5};

       int *p[5];
       int i;
       for(i=0;i<5;i++)
       {
          p[i] = &array[i];
          printf("%d\n",p[i]);
       }

       for(i=0;i<5;i++)
       {
           printf("%d\n",*p[i]);
       }
       return 0;
    }



五、字符串与指针

  • 字符串的表示形式

    • 数组形式:

      char str[] = "I love xdclass"; //栈

    • 字符指针形式:

      char *str = "I love xdclass"; //文字常量区

  • 字符指针形式

    char *str = "I love xdclass";

    因为常量不可修改,所以指针变量指向的字符串内容不可修改,即*str = "xdclass";这样是错误的


  • 修改指针变量的值

    char *str2 = "I love the world";
    str = str2;


  • 例子

    int main()
    {
       char string[] = "I love xdclass";
       printf("%s\n",string);

       char *str = "I love xdclass";
       char *str2 = "I love the world";
       str = str2;
       printf("%s\n",str);
       return 0;
    }




六、怎么使用指针函数

  • 指针函数

    函数返回类型是指针,所以就指针函数

  • 例子

    #include <stdio.h>

    // 买菜:
    char* buy()
    {
       char *foods = "鸡蛋";
       printf("%s买好了\n",foods);
       return foods;
    }

    // 洗菜
    void wash(char *foods)
    {
       printf("把%s洗干净了\n",foods);
    }

    // 炒菜
    void make(char *foods)
    {
       printf("把%s做好了\n",foods);
    }

    int main()
    {
       char  *foods = buy();
       wash(foods);
       make(foods);
       return 0;
    }



七、怎么使用函数指针

  • 函数指针的定义

    函数返回值类型 (* 指针变量名) (函数参数列表);

    int(*p)(int, int, double, float);


  • 例子

    int printfx(int x)
    {
       printf("%d\n",x);
       return 0;
    }

    int main()
    {
       printfx(2);
       int (*p)(int);

       p = printfx;
       p(3);

       return 0;
    }



八、 什么是指向指针的指针

  • 什么是指向指针的指针?

  • 定义方式

    数据类型 **变量名

  • 例子

int main()
{
   int a = 100;
   int *p = &a;
   int **pp = &p;
   printf("a:%d\n",a);
   printf("p:%d\n",*p);
   printf("pp:%d\n",**pp);
   return 0;
}



指针搞都不懂,好意思说自己会C语言? 指针搞都不懂,好意思说自己会C语言? 指针搞都不懂,好意思说自己会C语言?


# Louis讲师 #

- 手把手带你走进指针的世界 -




  速戳, 观看 C语言教程