一.指针的定义

1.变量的访问方式

  • 直接访问:通过变量名来进行访问
  • 间接访问:通过指针去访问数据

2.内存地址与指针

变量的地址值,即其在内存中的地址,其实就是指针,不过要记住一点,当该变量在内存中有多个地址值时,一般只会取其的最前面的值作为指针。

image-20230808155204785

3.指针变量

(1)定义

记录指针地址值的变量就称为指针变量

(2)格式

定义指针变量时用来表示指针变量的*只在定义时作标识作用,后继使用指针变量直接以*后加的标识符代表指针变量即可

例如:int *p = &i,下面要调用这个指针变量,就用p表示即可,再加*就成取值了。

参数:

  • 数据类型:与指针指向的变量的数据类型一致
  • 字符*,类似一个标识符,用于告诉编译器这是一个指针变量
  • 指针变量名: 任意取
  • 初始化地址值:使用取址符号&获取

格式:

数据类型 *指针变量名 [=初始地址值];

例子:

int i = 100;
int *pointer = &i;

4.指针的运算

(1)取址运算符: &

Ⅰ.作用

取出指定变量在内存中的地址值

Ⅱ.格式和占位符

格式:&变量

占位符:%p

Ⅲ.例子
int num = 10; 
printf("num = %d\n", num); // 输出变量的值。 num = 10
printf("&num = %p\n", &num); // 输出变量的内存地址。&num = 00000050593ffbbc

(2)取值运算符: *

Ⅰ.作用

用来把指针变量指向的值解析出来

Ⅱ.格式

区别于定义指针变量时的*,这里的*是一个运算符

*指针表达式
Ⅲ.例子

例如下面的p指针变量指向的是a变量的指针,此时使用取值运算符,就可以得到a指针所指向的值了

p指针变量本身记录的其实就是一个地址值,通过*解析后,就获得了其指向的值

int main() {

    int a = 2024;
    int *p;
    p = &a;
    
    printf("%p\n",&a); //0000005cc43ff6d4
    printf("%p\n",p);  //0000005cc43ff6d4
    printf("%d\n", *p); //2024
    
    return 0;
}

(3)用指针变量修改值

(4)指针与整数的加减运算

① 概述

数据类型占多少字节,每单位就移动多少字节

指针与整数的加减运算,表示是指针所指向的内存地址的移动整数就是移动的单位(字节)而这个移动的单位与其指向的数据类型有关

② 注意点
  • 只有指向连续的同类型数据区域,指针加、减整数才有实际意义

例如数组:对指针的加减就相当于改变索引,使其指向下一个数据

image-20230808164019404

③ 格式:

格式:指针±整数

范例:

int类型占用内存为4字节,*h+1相当于向前移动了4个字节

int p = 1;
int *h = &p;
*h+1;//相当于向前移动了四个字节
④ 例子

尝试使用指针整数加减的方式改变索引,间接实现遍历数组的目的

#include 
#define LENGTH 5

int main() {

    int arr[LENGTH] = {10,20,30,40,50};

    //方式1:传统直接访问的方式
    for(int i = 0;i < LENGTH;i++){
        printf("%d ",arr[i]);
    }

    printf("\n");

    //方式2:使用指针访问
    int *p = &arr[0];
    for(int i = 0;i < LENGTH;i++){
        printf("%d ",*(p+i));
    }

    return 0;
}
最后修改:2024 年 03 月 11 日
如果觉得我的文章对你有用,请随意赞赏