欢迎光临
我们一直在努力

指针概述以及注意点

系列文章目录


提

文章目录

  • 系列文章目录
  • 前言
  • 一、
  • 二、
    •  

  • 总结

前言

指针 系统概念 以及难点


一、指针

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 函数

记得要还回来哦

赞(0)
未经允许不得转载:171主机测评 » 指针概述以及注意点
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址