指针笔记(fjl)

指针笔记(fjl)16 动态内存申请与返还 int a int malloc n sizeof int 注意 要加 stdlib 头文件 并且拿了空间以后 还要 free free 时 p 为原址 初始化为 0 或 NULL 有一定好处

大家好,欢迎来到IT知识分享网。

一、指针的概念

  1. 什么是指针:指针是一种储存变量地址的特殊变量,形如&i,int*p(一级指针格式:指针类型*指针名=地址)
  2. &运算符:取变量地址。*运算符:通过地址取变量值。两者为互逆运算。
  3. *p(int*p=&i)指代i,可以读取或者改写i的值
  4. 指针是有类型的,类型与所指对象有关:如int*p指的是p是一个int型的指针
  5. 指针的void的类型:在未知所指变量类型时使用,仅保存变量的首地址,不保存目标的空间大小,不能进行取值和加减运算,但任意类型的指针都可以赋值给它
  6. 指针的强制类型转换:如int*p强制类型转换成void型:(void*)p;
  7. printf输出&i或p:用%p指代
  8. 一级指针概念:像上面,指向普通变量的指针即一级指针
  9. 多级指针概念:指向指针的指针。二级指针格式:intp。格式断句:int*的*。二级指针的取值逻辑如下:可见对二级指针变量,存储了一级指针的地址,第一次取值由一级指针地址取得一级指针所存地址即a的地址,第二次取值则由a的地址取得a的值。更高级指针以此类推指针笔记(fjl)

二、地址

  1. 指针变量本身的字节数取决于计算机是32位(4)还是64位(8)
  2. 先定义的变量地址在更高的地方,定义的变量按顺序紧挨
  3. 如果编译器中int与指针变量的占有的字节相同,则少了&不会报错
  4. 0地址与NULL:一个应用是用于指针的初始化,易于free

三、指针与数组

  1. 指针加减运算(同类型有意义):即推后到该类型的下一地址 ,比较运算,赋值运算(同类型有意义),*p++(因为++优先级高,意思为读取原来p并且访问,但语句结束时p+=1)
  2. 指针赋值运算:指针类型*指针名=变量地址(一级指针)
  3. 解读*p++:因为++运算级高于*,所以先做++后指向了原来的地址
  4. 指针与一维数组:1、函数原型中参数表内数组的格式如:int a[ ],int[ ],int *a。使用时用int[ ]即可。2、首地址:对于数组int a[4],若有int*p=a,意思是取a的首地址,即a[0]。若要取之后的单元可以使用:int*pb=a+1;或者int*pb=&a[1];。3、需要注意的sizeof:当a为首地址时,显然sizeof(a)不再是指a这个一维数组的字节数了。4、数组地址固定不可改,所以无法数组之间无法直接赋值
  5. 指针与多维数组(二维数组为例),对于int a[ ][ ],表达式及其含义如下(根本还是理解首地址的与指针的加减运算):
  6. 指针笔记(fjl)
  7. 指针与字符串(首地址):char*string=“i love china”,因为字符串相当于一个字符数组,所以string实际上指向了这个字符数组的初始位置,printf(“%s”,string);可以打印完这个字符串。指针指向字符串与指向数组类似。
  8. 指针数组:当一个数组的单元为一级指针时,可以用二级指针进行遍历:指针笔记(fjl)

四、指针与函数

  1. 函数中的指针的格式(函数参数表格式:变量类型*变量名。实参:p或&i)
  2. 利用指针可以用*p改写并返回多个值
  3. 指针函数:以返回一级指针为例,形如:int*f(int x,int y)。int*为返回类型
  4. 函数指针:指向一个函数。形如:int(*f)(int a, int b)。f是一个指针,指向一个int返回类型的函数,参数表为(int a, int b),赋值时f=函数名

五、指针与const:int i;

  1. const int*p=&i与int const*p=&i:表明*p是const,不可以通过*p修改i的值,但i是否是const要看i自身定义
  2. int*const p=&i:表明指针是const,不可改指

六、动态内存申请与返还:

        格式:int n;int*a=(int*)malloc(n*sizeof(int));就完成了a这个int型指针指向了一块内存空间。此时a相当于一个int类型的数组,n为数组的容量。注意:申请动态内存要加stdlib头文件,并且拿了空间以后,还要free(),free时确保p为原址。

七、指针的应用

a.函数返回多个值或者修改多个值,b.在结构,数组整体有很多int,但如果是用指针来引入,在函数里,它只占4(传入较大数据做参数),c.动态申请内存

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151761.html

(0)
上一篇 2025-03-11 21:25
下一篇 2025-03-11 21:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信