C语言学习笔记(下)

引言

C语言学习笔记(中)-CSDN博客本章的学习笔记中,介绍了循环语句,分支控制语句、数组、辅助控制关键字等知识,本章学习笔记将要介绍指针、数组指针、指针数组等知识点。如果有错误的地方,还请广大朋友批评指正。

一、指针

        内存用于保存各种数据,内存中每个字节的空间都有着自己的一个编号,这个编号就是指针。相应的保存指针的变量叫做指针变量。

        &  取地址符,获取变量在内存中占用的空间的地址编号,通常将首地址定义为地址最小的那个地址。

        *  取表示作用,表示定义的是一个指针变量

1.格式:

        存储类型  数据类型  *指针变量名

2.指针的基本使用

        定义一个指针变量来保存变量的地址,指针保存了变量的地址,称之为指针指向变量,当指针保存了变量的地址后,就可以通过指针指向的空间的内容。

        指针变量也是变量的一种,值允许改变,指针的值改变,当指针的值改变的时候称为指针的指向改变了

        当指针没有初始化的时候,里面存的就是随机值,这种不确定的指针,称为野指针。

3.指针的运算

        指针的运算本质就是将指针所指的地址作为数据计算,常见的运算包括算术运算、关系运算、赋值运算。

        算术运算:+ - ++ --

        关系运算: < > == !=

        赋值运算:=

        注意:指针的运算与指针的数据类型有关系,,通常情况下,只有相同类型的指针的运算才有意义。

二、指向一维数组的指针作用

        数组名就是数组的首地址,可以定义一个指针来保存数组的首地址,写法如下:

int *p = s;

int *p = &s[0];

 上面的写法中s是数组,p为指针

        当指针指向数组后,有着下面的等价关系

s[i] <==> *(s+i) <==> p[i] <==> *(p+i)

 三、二维数组的指针作用

        二维数组的数组名是一个地址常量,也就是数组的首地址。

        注意:二维数组的数组名的操作空间是一整行元素,例如s+1加的就是一整行

        *操作可以给行指针降维,降维的意思是将行指针降成操作空间是一个元素的指针,而当对降维后的指针再一次去*操作后,就是在操作内部的数据

四、数组指针

        数组指针是一个指针类型,指向一个二维数组,数组指针一般多用于函数传参。

格式:

        数据类型 (*数组指针名)[列宽]

 定义了一个数组指针 p,p指针能指向 int 类型的列宽为3的二维数组,用法如下

int s[2][3] ={{1,2,3},{4,5,6}};

int (*p)[4] = s;

 指针指向二维数组后 就有下面6个等价关系

s[i][j] <==> *(s[i]+j) <==> *(*(s+i)+j)

p[i][j] <==> *(p[i]+j) <==> *(*(p+i)+j)

五、指针数组

        指针数组是一个数组,数组中的每个元素都是一个指针类型。

格式:

数据类型 *指针数组名[下标]; 

六、二级指针

        二级指针的作用是保存一级指针的地址,二级指针多用于函数传参

格式:

数据类型 **二级指针名;       

 二级指针的使用方法:

int a = 1;

int *p = &a;

int **q = &p;

 上述代码的执行结果的等价关系如下:

**q   <==>   *p   <==>   a  ,    *q     <==>    p   

七、虚拟内存的分区

注意:栈区的内存是允许修改的,字符串常量区是不允许修改的,堆区的内存空间是有人手动分配和回收的,栈区由操作系统负责分配和回收

八、const关键字

        const用来修饰的变量,表示的是一个只读变量,不可以修改

        注意:const用来修饰指针的时候,需要注意const 和 * 的位置

                1.如果const在 * 的左边此时表示修饰的是指针,意思是不能通过这个指针改变指向空间的内容,但是指针的指向是可以修改的。

                 2.如果const 在 *  的右边此时表示修饰的指针的指向,意思是指针的指向不能被修改,但是可以通过指针修改指向空间里面的内容。

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

译泽在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值