c语言的指针知识汇总

码农公社  210.net.cn   210= 1024  10月24日一个重要的节日--码农(程序员)节

  1. 指向单个变量的指针;

      1 int a = 5;

      2 int* p = &a;

      3 printf("%d", *p);

  2. 数组的指针

    (1)一维数组的指针   

    int a[5] = { 1,2,3,4,5 };

    int *p;

    p = a;

    printf("%d\n", a[1]);

    printf("%d\n", *(p + 1));

    printf("%d", p[1]);

    (2)二维数组的指针   

       (1)列指针

               int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };

               int* p;

               //p = &a[0][0];

               //p = a[0];

               p = *a;

               printf("%d\n", *(p + 4 * 2 + 3));  //a[i][j] = *(p + i * n + j);    //n数组的列数

               printf("%d", a[2][3]);

      (2)行指针 (指向数组的指针)

               int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };

               int(*p)[4];

               p = a;

               printf("%d\n", a[2][3]);

               printf("%d", *(*(p + 2) + 3));


  3. 指向函数的指针



    int main()

    {

    int func(int a);

    int (*p)(int a);

    int a = 5;

    p = func;

    (*p)(a);  //调用

    return 1;

    }

    int func(int a)

    {

       printf("%d", a);

       return 1;

     }


  4. 指向指针的指针(有时候在想前面的*是不是可以无限写下去……)

     int a = 5;

     int* p1, ** p2, *** p3;

     p1 = &a;

     p2 = &p1;

     p3 = &p2;

     printf("%d", ***p3);


  5. 指针数组

    char* p[3] = { "hello", " ", "world" };

    printf("%s", *(p + 2));


  6. 返回指针值的函数


    int main()

    {

        char* myStrcat(char* p1, char* p2);

        char str[100] = "hello ";

        char* mes = "world";

        printf("%s\n", myStrcat(str, mes));

        return 1;

    }

    char* myStrcat(char* p1, char* p2)

    {

        char* start = p1;

        while (*p1 != '\0')

        {

            p1++;

        }

        while (*p1++ = *p2++)

        {}

        return start;

    }


  7. 文件指针   

    FILE *fp; 

    这里用词不太严谨。根据《c语言程序设计(第三版)》,指针是一个地址,而指针变量是存放地址的变量。“指针”和“指针变量”是不同的概念。 

    然而大多数情况下,都将“指针变量”直接称为“指针”。这里除了第二点,第六点外,”指针“都是指”指针变量“。


资料来源于网络,若有侵权请联系删除。

评论