学习笔记之指针的详解和应用

目录

1. 指针的简介

2. 指针的操作

3. 指针与数组

4. 指针的应用


      笔者在学习DMA实验时,发现对指针的理解和使用还是有些不足,本章将详尽地重新梳理一遍指针的知识和应用。

1. 指针的简介

        指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将指针形象化的称为"C语言的灵魂"。由于指针和底层硬件紧密相连,所以使用指针可以实现数据的间接访问。

        指针即指针变量,用于存放其他数据单元(变量/数组/结构体/函数等)的首地址。若指针存放了某个数据单元的首地址,则指针指向了该数据单元

数据类型数据大小(字节)指向该数据类型的指针数据大小数据大小(字节)
(unsigned) char1(unsigned) char *x
(unsigned) short2(unsigned) short *x
(unsigned) int4(unsigned) int *x
(unsigned) long4(unsigned) long *x
float4float *x
double8double *x

        注:16位系统:x = 2;32位系统:x = 4;64位系统:x = 8。

2. 指针的操作

        定义:int a;

                   int *p;

操作方式示例说明
取地址p = &aa的首地址赋值给p
取内容*p取指向的数据单元
p++指针向下移
p--指针向上移

注:指针和数据单元不可以跨类型传递,例如 a = p (×),a = *p (√),或者p = &a (√)。

3. 指针与数组

        在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。数组的定义等效于申请内存、定义指针和初始化。

        例: unsigned char array[]={...}   //等效申请内存,且定义unsigned char *array = 0xXX

此时array[i] = *(array + i)。

4. 指针的应用

  •         传递函数
  •         传递返回值
  •         直接访问物理地址下的数据

        使用指针传递大容量参数,或者主函数和子函数利用同一个数据单元时,为了进一步提高运行效率,我们可以利用指针来减少内存的使用。例如:

int Find_MAX(const int *array){ ... };        //定义函数

int max = Find_MAX(a);        //将数组整体发送到函数

        使用指针输出参数,可以利用指针使得主函数和子函数用同一个数据单元地址的特性,通过修改某一地址的数组来达到多返回值的编辑。例如:

void Find_MAX( int *p ,const int *array) {         //定义函数

     *p = array[0];  //将数组第一个数据赋值到max的地址

     int i;

     for(i = 0; i < 3;i ++) {    

        if(array[i]>*p) *p = array[i]; }    //比较大小

int main(){

      int a[3] = {0x01,0xA2,0x1A};        //定义一个数组 

      int max;

      Find_MAX(&max, a);    //最大值通过操作max地址完成了传输

        }

        免责声明:本章资料来源于b站江科大,若有侵权请联系删除,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值