C语言 第五章 指针(1)

发布于:2025-03-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

指针的理解

变量的访问方式

内存地址与指针

指针变量 

指针变量的定义

举例:

注意:

 指针的应用场景


指针的理解


变量的访问方式

计算机中程序的运行都是在内存中进行的,变量也是在内存中分配的空间,访问内存中变量存储的数据有两种方式:直接访问和间接访问。
直接访问,直接使用变量名进行的访问,以前的程序中都是采用这种方式。

int num1 = 10;
int num2 = 20;
int num3 = num1 + num2;

间接访问,通过指针来实现。下面看如何理解指针。


内存地址与指针
 

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。因为每个内存单元都有地址,所以变量存储的数据也是有地址的。

通过地址能找到所需的变量单元,可以说,地址指向该变量单元,将地址形象化地称为“指针”。
 

  • 变量名:变量名是给内存空间取的一个容易记忆的名字。 
  •  变量值:在变量单元中存放的数据值。
  • 变量的地址:变量所使用的内存空间的地址,即指针。 

指针变量
 
 

指针变量:一个变量专门用来存放另一变量在内存中数据的地址(即指针),则它称为“指针变量”。我们可以通过访问指针变量达到访问内存中另一个变量数据的目的。
 
例如上图中地址 0x00000001 是变量 i 的指针, i_pointer 就是一个指针变量。体会:指针就是内存地址,使用指针访问变量,就是直接对内存地址中的数据进行操作。


指针变量的定义

一般格式:

数据类型* 指针变量名 [=初始地址值];
 
数据类型是指针变量所指向变量的数据类型。

  • 可以是int、char、float等基本类型,
  • 也可以是数组等构造类型。

 
字符*  用于告知系统这里定义的是一个指针变量。


举例:

 int* p;  

读作“指向int的指针”或简称“int指针”,这是一个指针变量,用于存储int型的整数在内存空间中数据的地址。

#include <stdio.h>
int main(){
    //交换两个变量的值
//    int a=10;
//    int b=20;
//    int c;
//    c=a;
//    a=b;
//    b=c;
//    printf("a=%d\n",a);
//    printf("b=%d\n",b);
    int a=10;
    int b=20;
    int* p1 =&a;;
    int* p2 =&b;;
    int* pt = 0;
    pt=p1;
    p1=p2;
    p2=pt;
    printf("a=%d\n",*p1);//20
    printf("b=%d\n",*p2);//10

}

变形写法:

 int  *p; 
 

注意:
 

  • 指针变量的名字是p,不是*p。
  • 指针变量中只能存放地址,不要将一个整数(或任何其它非地址类型的数据)赋给一个指针变量。

举例:

同一行声明两个指针变量  int* a, b; 
 
指针变量的大小:不同类型的指针变量所占用空间大小是相同的,都是8个字节 。

#include "stdio.h"

int main() {

    //声明指针变量
    int* p1;
    int *p2;

    int* p3,p4;
    int *p5,p6;

    //指针初始化赋值,走NULL关键字
    int* p7 = NULL;

    return 0;
}

 指针的应用场景


场景1:

使用指针访问变量或数组的元素。

#include <stdio.h>
int main(){
    //为什么用指针加减操作
    //指针加减运算,非常适合连续的数据操作
    int arr[5]={11,22,33,44,55};
    int* p =&arr[1];
    printf("p==%d\n",*p);//28-2
    printf("p==%d\n",*(p+1));//33
    printf("p==%d\n",*(p-1));//11
}

场景2:

应用在数据结构中。比如: