美文网首页
C语言-指针

C语言-指针

作者: 浮华_du | 来源:发表于2021-07-28 16:40 被阅读0次

几篇文章复习C语言,摘录重点,仅用于个人学习~

每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址.

什么是指针

指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明.
声明: int *p;
指向: p = &int
地址: (%p p)
值 :(%d *p)

#include <stdio.h>
int main()
{
    int var_runoob = 10;
       int *p;              // 定义指针变量
       p = &var_runoob;
    
      printf("var_runoob 变量的地址: %p\n", p);

    return 0;
}
//var_runoob 变量的地址: 0x7ffeefbff478
image.png

所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。
不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

指向数组的指针

数组名是一个指向数组中第一个元素的常量指针;使用数组名作为常量指针是合法的,反之亦然。
因此,(balance + 4) 是一种访问 balance[4] 数据的合法方式。
一旦您把第一个元素的地址存储在 p 中,您就可以使用 p、(p+1)、
(p+2) 等来访问数组元素

//balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,下面的程序片段把 p 赋值为 balance 的第一个元素的地址:

#include <stdio.h>
int main()
{
    /* 带有 5 个元素的整型数组 */
      double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
      double *p;
      int i;
    
      p = balance;
    
      /* 输出数组中每个元素的值 */
      printf( "使用指针的数组值\n");
      for ( i = 0; i < 5; i++ )
      {
          printf("*(p + %d) : %f\n",  i, *(p + i) );
      }
    
      printf( "使用 balance 作为地址的数组值\n");
      for ( i = 0; i < 5; i++ )
      {
          printf("*(balance + %d) : %f\n",  i, *(balance + i) );
      }
    return 0;
}
//使用指针的数组值
//*(p + 0) : 1000.000000
//*(p + 1) : 2.000000
//*(p + 2) : 3.400000
//*(p + 3) : 17.000000
//*(p + 4) : 50.000000
//使用 balance 作为地址的数组值
//*(balance + 0) : 1000.000000
//*(balance + 1) : 2.000000
//*(balance + 2) : 3.400000
//*(balance + 3) : 17.000000
//*(balance + 4) : 50.000000

指向函数的指针

函数指针是指向函数的指针变量。
通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。
函数指针可以像一般函数一样,用于调用函数、传递参数。

#include <stdio.h>
int max(int x, int y)
{
    return x > y ? x : y;
}
int main()
{
    /* p 是函数指针 */
        int (* p)(int, int) = & max; // &可以省略
        int a, b, c, d;
     
        printf("请输入三个数字(空格隔开):");
        scanf("%d %d %d", & a, & b, & c);
     
        /* 与直接调用函数等价,d = max(max(a, b), c) */
        d = p(p(a, b), c);
     
        printf("最大的数字是: %d\n", d);
    return 0;
}
//请输入三个数字(空格隔开):3 123 1
//最大的数字是: 123

如何使用指针

#include <stdio.h>
int main()
{
    int  var = 20;   /* 实际变量的声明 */
      int  *ip;        /* 指针变量的声明 */
    
      ip = &var;  /* 在指针变量中存储 var 的地址 */
    
      printf("var 变量的地址: %p\n", &var  );
    
      /* 在指针变量中存储的地址 */
      printf("ip 变量存储的地址: %p\n", ip );
    
      /* 使用指针访问值 */
      printf("*ip 变量的值: %d\n", *ip );
    return 0;
}
//var 变量的地址: 0x7ffeefbff478
//ip 变量存储的地址: 0x7ffeefbff478
//*ip 变量的值: 20

1.递增一个指针

#include <stdio.h>
const int MAX = 3;
int main()
{
    int  var[] = {10, 100, 200};
       int  i, *ptr;
     
      /* 指针中第一个元素的地址 */
       ptr = var;
       for ( i = 0; i < MAX; i++)
       {
          printf("存储地址:var[%d] = %p\n", i, ptr );
          printf("存储值:var[%d] = %d\n", i, *ptr );
          /* 指向下一个位置 */
          ptr++;
       }
    return 0;
}
//存储地址:var[0] = 0x7ffeefbff46c
//存储值:var[0] = 10
//存储地址:var[1] = 0x7ffeefbff470
//存储值:var[1] = 100
//存储地址:var[2] = 0x7ffeefbff474
//存储值:var[2] = 200

2.指针的比较

指针可以用关系运算符进行比较,如 ==、< 和 >。如果 p1 和 p2 指向两个相关的变量,比如同一个数组中的不同元素,则可对 p1 和 p2 进行大小比较。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

#include <stdio.h>
const int MAX = 3;
int main()
{
    int  var[] = {100,10,200};
      int  i, *ptr;
    
      /* 指针中第一个元素的地址 */
      ptr = var;
      i = 0;
      while ( ptr <= &var[MAX - 1] )
      {
    
         printf("存储地址:var[%d] = %p\n", i, ptr );
         printf("存储值:var[%d] = %d\n", i, *ptr );
    
         /* 指向上一个位置 */
         ptr++;
         i++;
      }
    return 0;
}

//存储地址:var[0] = 0x7ffeefbff46c
//存储值:var[0] = 100
//存储地址:var[1] = 0x7ffeefbff470
//存储值:var[1] = 10
//存储地址:var[2] = 0x7ffeefbff474
//存储值:var[2] = 200

相关文章

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一。有了指针,C语言就可以抛开所有束...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

  • [Swift]结构体指针操作

    C语言的指针操作 在c语言中申明一个变量并通过指针修改该变量的值 a value is 2 c语言操作结构体指针操...

  • Go语言-指针

    Go语言中的指针不同于C语言,Go语言的指针使用方法要简单很多。当然和C语言从指针定义到指针的使用都有很大的不同。...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • 指针数组和数组指针

    指针数组|存储指针的数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。 例如:int *p[10]...

  • iOS开发 -- C语言基础8(指针)

    iOS开发 -- C语言基础8(指针) 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很...

网友评论

      本文标题:C语言-指针

      本文链接:https://www.haomeiwen.com/subject/vfcbpltx.html