【C语言】指针

1.1 指针的概念
指针变量也是一个变量
指针存放的内容是一个地址,该地址指向一块内存空间

1.2 指针变量的定义
可以定义一个指向一个变量的指针变量。
int *p; //表示定义一个指针变量
*p; //代表指针所指内存的实际数据
切记,指针变量只能存放地址,不能将一个 int 型变量直接赋值给一个指针。
int *p = 100;

1.3 &取地址运算符
&可以取得一个变量在内存当中的地址

1.4 无类型指针
定义一个指针变量,但不指定它指向具体哪种数据类型。可以通过强制转化将 void * 转化为其他类型指针,也可以用 (void *) 将其他类型指针强制转化为 void 类型指针。
void *p

1.5 NULL
NULL在C语言中的定义为(void *)0

1.6 空指针与野指针
指向NULL的指针叫空指针,没有具体指向任何变量地址的指针叫野指针。
在这里插入图片描述
1.7 指针的兼容性
指针之间赋值比普通数据类型赋值检查更为严格,例如:不可以把一个 double * 赋值给 int *
原则上一定是相同类型的指针指向相同类型的变量地址,不能用一种类型的指针指向另一种类型的变量地址。

1.8 指向常量的指针与指针常量
const char *p; //定义一个指向常量的指针
char *const p; //定义一个指针常量,一旦初始化之后其内容不可改变

1.9 指针与数组的关系
一个变量有地址,一个数组包含若干个元素,每个元素在内存中都有地址。
int a[10];
int *p = a;

1.10 指针运算
指针运算不是简单的整数加减法,而是指针指向的数据类型在内存中占用字节数做为倍数的运算。
char *p;
p++; 移动了 sizeof(char) 这么多的字节数
int *p1;
p1++; 移动了 sizeof(int) 这么多的字节数

赋值:int *p = &a;
求值:int I = *p;
取指针地址 int **pp = &p;
将一个整数加(减)给指针:p + 3; p – 3;
增加(减少)指针值 p++,p–
求差值 ,p1 – p2,通常用于同一个数组内求两个元素之间的距离
比较 p1 == p2,通常用来比较两个指针是否指向同一个位置。

1.11 通过指针使用数组元素
p+1 代表 &a[1],也可以直接使用 p[1] 表示 a[5]
p+5 代表 &a[5]
p++

1.12 指针数组
int *p[5];

1.13 指向指针的指针(二级指针)
指针就是一个变量,既然是变量就也存在内存地址,所以可以定义一个指向指针的指针。

int i = 10;
int *p1 = &i;
int **p2 = &p1;
printf("%d\n", **p2);

以此类推可以定义3级甚至多级指针。C语言允许定义多级指针,但是指针级数过多会增加代码的复杂性,考试的时候可能会考多级指针,但实际编程的时候最多用到3级,但3级指针也不常用,一级和二级指针是大量使用。
在这里插入图片描述
1.14 指向二维数组的指针

int buf[3][5]二维数组名称,buf代表数组首地址
int (*a)[5]定义一个指向int [5]类型的指针变量a
a[0], *(a + 0), *a0行,0列元素地址
a + 1第1行首地址
a[1], *(a + 1)第1行,0列元素地址
a[1] + 2, *(a + 1) + 2, &a[1][2]第1行,2列元素地址
*(a[1] + 2), ((a + 1) + 2), a[1][2]第1行,2列元素的值

1.15 指针变量做为函数的参数
函数的参数可以是指针类型。,它的作用是将一个变量的地址传送给另一个函数。
通过函数的指针参数可以间接的实现形参修改实参的值
在这里插入图片描述
1.16 一维数组名作为函数参数
当数组名作为函数参数时,C语言将数组名解释为指针
int func(int array[10]);

1.17 二维数组名作为函数参数
二维数组做函数参数时可以不指定第一个下标。
int func(int array[][10]);
将二维数组做为函数的参数用例不是特别多见

1.18 const关键字保护数组内容
如果讲一个数组做为函数的形参传递,那么数组内容可以在被调用函数内部修改,有时候不希望这样的事情发生,所以要对形参采用const参数
func(const int array[])

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值