系列文章目录
提
文章目录
- 系列文章目录
- 前言
- 一、
- 二、
-
- 总结
前言
指针 系统概念 以及难点
一、指针
1.指针的定义
指针是一种特殊的变量,它存储的是内存地址。这种特性使得指针能够直接操作内存,实现高效的底层控制。

2.指针的图示理解

指针p 他的值使一个地址 如果指针指向a,则其值就是a的地址
那我们指针p本身也有地址,**p则指向p的地址
2.指针核心操作符

ATTENTION
1.结合性都是从右到左
举例

p储存地址,则*p指向地址的值,也就是a

ATTENTION
间接访问中 *p是指变量p是指针
p指向mum的地址 通过改*p从而改mum

3.指针算术运算

*(p+1)是移动1*sizeof(字符类型) p++p– 同理
示例

ATTENTION:
1. *p=数组名 则其指向数组第一个元素的位置
4.指针与数组
1.数组名代表该数组首元素的地址(常量指针)
2.指针可以指向数组元素,通过指针可以遍历数组
举例:arr[i]=*(arr+i)
int *P=arr
图示例:
别忘了数组是从0开始的哈
三种方式遍历数组

5.指针数组与数组指针
指针数组:存放指针的数组
举例:int *p[5] 【】优先级高于*,因此这个为数组,包含5个int*类型的元素。每个元素指向独立的内存区
举例
6.数组指针
定义:指向数组的指针;
首先 他是一个指针
int (*p2)[5]; *p2强制结合 所以是指针
指向包含5个整数的连续内存块
ATTENTION
p2+1移动整个数组长度(20字节)
二、指针与函数
1.函数指针与指针函数
C语言默认是值传递,函数内修改参数不影响外部变量

x,y形参,在封装函数中,改值不影响外部变量
但是 使用指针可以实现传址调用,在函数内修改外部变量

传的是地址,并且 封装函数使用*x*y
2.函数返回多个值
通过传递指针给函数,函数可以通过这个指针来修改其指向的值,从而"返回"多个值

形参中有两个 指针变量 赋值时指针变量直接赋值a,b相关表达式,后续调用函数时 需要&
FIRST 函数指针
定义:指向函数的指针变量,存储的是函数的入口地址

函数代码存储在内存的代码段中,函数指针存储的是该代码段的地址;
应用场景:常用于回调函数、动态调用函数

先定义了一个add函数 接着主函数中定义了一个
Int(*变量名)(参,参) 意为把add函数的地址储存在了本变量名中
下次可以直接调用变量名
指针函数
定义:返回指针值的函数,其返回值是一个指针。 本质上是函数 返回值是指针
语法: 指针类型 函数名(参数列表);
int* func(int a);



注意有人可能问 不是指针函数吗 返回应该是指针啊 ,对的 你说的没错 初学者可能把str会误解为数组 实际上 数组名就是一个指向数组首地址的指针
此函数被赋值给了指针ptr,打印的时候应该输入地址 也就是ptr(指向结果首位)
回调函数
定义:通过函数指针调用的函数。把函数的地址(指针)作为一个参数传递给另一个函数,当这个指针被用来调用所指的函数的时候,这个被调用的函数就是回调函数

左侧定义四个函数 右边利用函数指针ret是指针变量名pf的结果 cal函数 :它接收一个函数指针作为参数,在 Calc 内部,让用户输入两个整数,然后调用传进来的那个函数(pf变量名 两个形参),对这两个整数做运算
结果存在ret中
2.动态内存分配和释放
定义 :在程序运行期间,根据需要从堆(heap)中分配内存块,在使用完毕后将其释放回堆中。态分配的内存不会在函数返回时自动释放,程序员必须显式地管理这些内存,以避免内存泄漏和其他问题。
作用
灵活性:动态内存分配允许程序在运行时根据实际需求分配内存,这对于处理不确定大小的数据结构(如链表、树、图等)非常有用; 节省内存:动态内存分配可以根据实际需要精确分配内存,避免浪费; 共享资源:动态分配的内存可以在多个函数或模块之间共享,从而提高资源利用率。
mallco 和 free 函数

记得要还回来哦



