指针

目录

指针概念

指针分类

指针定义

数组与指针

数组

数组与指针的关系

指针应用

参数传递

值传递

地址传递:

传递返回值

直接访问物理地址下的数据

结构体指针

直接引用

间接引用

用结构体指针引用结构体成员


指针概念

指针即指针变量,用于存放其他数据单元(变量/数组/结构体/函数等)的首地址。若指针存放了某个数据单元的首地址,则这个指针指向了这个数据单元,若指针存放的值是0,则这个指针为空指针定义一个指针变量.

指针分类

函数指针 数组指针 指针数组 指针函数

指针定义

1.char *p=&a; 等同于char* p; p=&a;

2.指针的加减通常用于对数组的操作中

数组与指针

数组

数组是一些相同数据类型的变量组成的集合

数组与指针的关系

其数组名即指向该数据类型的指针,及数组名是指向数组首地址的指针

数组的定义等效于申请内存,定义指针,和初始化

注意:

如果定义的是int c[ ]={0X33,0X35,0X35};

对其进行指针操作仍是

*(c+1);指针加一是为了指向下一个数据,实际地址移动了4个字节,偏移量与数据类型有关

指针应用

1.参数传递

值传递

#include <stdio.h>
void fun(int param)
{
    printf("%x\n",param);//%x是16进制显示
}
void main()
{
    int a = 0x66;
    fun(a);
}

代码fun函数会申请一块内存param将传入的a值复制到申请的内存param中,也就是说传给子函数有个数据复制的过程,

值传递隔离了主函数和子函数之间的变量,假如子函数中改变了param的值主函数中a的值不会改变(详细内容看江科大指针55min)

地址传递:

值传递过程中有复制的过程,并且需要额外申请内存,如果传递的数据过大则会占用过大的内存

地址传递过程中子函数和主函数共用同一个地址下的数据,无法进行数据隔离(可以用const(const修饰常量,常量只读不能更改)修饰子函数传递的数组,也可以用全局变量)

详细请看(1h03min)

使用指针传递输出参数,利用主函数和子函数使用同一套数据的特性,实现数据的返回,可实现多返回值函数的设计

可实现多数据进行传递,可弥补return只能返回一个数据

2.传递返回值

传递的是返回的数据地址

将模块内的公有部分返回,让主函数持有模块的“句柄”,便于程序对指定对象的操作I

注意子函数中的局部变量会在子函数执行完之后被释放,所以不能传递被释放的数据地址

3.直接访问物理地址下的数据

访问硬件指定内存下编钩数据,如设备ID号等
将复杂格式的数据转换为字节,方便通信与存储

每个单片机具有全球唯一身份证号码(ID号)

结构体指针

直接引用

直接引用结构体进行同种数据类型的整体赋值

间接引用

用结构体指针引用结构体成员

引用结构体变量的成员一般形式为: (*结构体指针变量) . 成员名

上述间接引用形式比较直观,但略显繁琐.故C语言提供了另一种更加简洁的引用形式:

一般形式: 结构体指针变量->成员名     (此处 -> 称为指向运算符)

其功能等价于: (*结构体指针变量).成员名

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值