返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言基础知识点指针的使用
  • 297
分享到

C语言基础知识点指针的使用

2024-04-02 19:04:59 297人浏览 安东尼
摘要

目录一、指针的作用二、地址与指针三、指针变量四、数组与指针五、指针自加自减运算六、指向指针的指针七、指针变量作为函数形参八、函数指针九、函数指针数组十、指针的应用场景一、指针的作用

一、指针的作用

运用指针可以有效地表达一些复杂地数据结构,比如系统地动态分配内存、消息机制、任务调度、定时器等等。掌握指针可以使你的程序更加简洁、紧凑、高效。那么在单片机领域,如果是做稍微大一点的项目,需要把每一个功能做出模块化,硬件驱动层和应用层分别独立运行,即使更换单片机型号也不用修改应用层程序,即移植性非常强,这些都离不开指针。甚至没有指针会很难实现,即使实现了代码可移植性也很差。
如果错误使用指针,可能会造成内存溢出错误从而导致程序’死机‘。

二、地址与指针

指针是一个比较抽象的概念,如果想真正了解指针,那么要先从数据是如何存储在内存里面说起,我们通过一个图来看数据在内存里面存储的情况。

红色框中是内存的地址,绿色框中是地址下面的数据,橙色框中是内存的偏移量。总结:通过地址就可以访问内存。

三、指针变量

变量类型 *变量名

unsigned char *p;
unsigned char a;
p=&a;

这个代码里,我们定义了一个变量a,定义了一个指针变量p,我们通过运算符&把变量a的内存地址赋值给变量p,所以p指向了变量a的内存存储地址。
上面说了指针变量赋值的问题。那么怎么获取和改变指针变量指向那个内存地址的数据,我们可以通过:
*指针变量 = 数值。如:*p = 10
这样操作来改变指针变量指向的内存地址的数据。
通过:a = *p;
来获取指针变量指向那个内存地址的数据。

四、数组与指针

一般系统或编译器会分配连续地址的内存来存储数组里面的元素,如果把数组地址赋值给指针变量,那么就可以通过指针变量来引用数组,读写数组里面的元素了,具体方法如下:
指针变量 = &数组名[下标]
或者
指针变量 = 数组名
例如:p = &buff[0]; 或者p = buff
p是指针变量,buff是数组,通过这两种方式可以把数组地址赋值给指针变量。

五、指针自加自减运算

指针变量除了可以用来获取内存地址的值以外,还可以用来进行加减运算,那么这个加减呢跟普通变量加减不一样,普通变量加减的是数值,而指针变量加减的是地址。

二维数值与指针:

二维数组与一维数组一样,都是分配连续的地址来存储数据的。

六、指向指针的指针

一个指针变量指向整型变量或者字符型变量,当然也可以指向指针变量的存储地址,可以简称双重指针。

定义方法:

数据类型 **指针变量名;

例如:unsigned char **p

这个含义就是定义了一个指向指针的指针变量p,它指向另一个指针变量。

七、指针变量作为函数形参

一般我们都是以字符型、整型、数组等作为函数的形参带入,除此以外,指针变量也可以作为形参使用,而且用的非常多,主要目的是为了改变指针指向地址的值,专业术语是通过形参改变实参的值。

八、函数指针

如果在程序中定义了一个函数,那么在编译时系统就会给这个函数代码分配一段存储空间,这段存储空间的首地址就称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫函数指针变量,简称函数指针。

函数指针的定义:函数返回值类型 (*指针变量名) (函数参数列表);

九、函数指针数组

像字符型,整形都是可以单独定义,也可以定义成数组,同样函数指针也可以定义成数组,函数指针数组定义格式如下:
函数返回值类型 ( *指针变量名[数组大小] ) ( 函数参数列表);

#include <stdio.h>

enum 
{
    led1,
    led2,
    led3,
    led_sum    
};

void drive_led1(unsigned char sta)
{
    if(sta) printf("led1 on\r\n");
        else  printf("led1 off\r\n");
}
void drive_led2(unsigned char sta)
{
    if(sta) printf("led2 on\r\n");
        else  printf("led2 off\r\n");
}
void drive_led3(unsigned char sta)
{
    if(sta) printf("led3 on\r\n");
        else  printf("led3 off\r\n");
}

void (*funcled[led_sum])(unsigned char sta) = {drive_led1,drive_led2,drive_led3} ; 

void xxx1()
{
    printf ("func1 running\r\n");
}
void xxx2()
{
    printf ("func2 running\r\n");
}
void xxx3()
{
    printf ("func3 running\r\n");
}

void (*func1[3])() = {xxx1,xxx2,xxx3} ;
unsigned char (*func) (unsigned char ,unsigned char);

unsigned char sum(unsigned char v1,unsigned char v2)
{
    return v1+v2;
}

void setvlue (unsigned char *p)
{
    *p = 20;    
}

int main()
{
    unsigned char a;
    setvlue(&a);
    func=sum;
    
    a=func(1,2);
    a=(*func)(1,2);
    printf ("a=%d\r\n",a);
    func1[0]();
    func1[1]();
    func1[2]();    
    funcled[led3](1);//控制亮灯,一条代码即可 
            
    return 0;    
}

十、指针的应用场景

在嵌入式领域主要有两个方面的作用:

 到此这篇关于C语言基础知识点指针的使用的文章就介绍到这了,更多相关C语言指针使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言基础知识点指针的使用

本文链接: https://lsjlt.com/news/141466.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言基础知识点指针的使用
    目录一、指针的作用二、地址与指针三、指针变量四、数组与指针五、指针自加自减运算六、指向指针的指针七、指针变量作为函数形参八、函数指针九、函数指针数组十、指针的应用场景一、指针的作用 ...
    99+
    2024-04-02
  • c语言中指针零基础知识点有哪些
    小编给大家分享一下c语言中指针零基础知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.指针是什么(可能有点难理解)指针的是啥?指针实际上就是地址,地址...
    99+
    2023-06-29
  • C语言指针之必须要掌握的指针基础知识
    目录一、指针概述指针的创建指针的大小如何使用指针二级指针二、野指针形成野指针的原因如何规避野指针三、指针的基本运算指针± 整数指针-指针四、指针和数组五、指针数组总结一、指针概述 指...
    99+
    2024-04-02
  • C语言指针的相关知识点有哪些
    这篇文章将为大家详细讲解有关C语言指针的相关知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一站 字符指针----存放字符地址的指针1.使用方法(1)直接使用字符int main()...
    99+
    2023-06-29
  • C语言指针基础详解
    目录1.1:概述1.1.1:内存1.1.2:内存1.1.3:指针和指针变量1.2:指针基础知识1.2.1:指针变量的定义和使用1.2.2:通过指针间接修改变量的值1.2.3:指针的大...
    99+
    2024-04-02
  • C语言基础知识点实例分析
    这篇文章主要讲解了“C语言基础知识点实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言基础知识点实例分析”吧!什么是C语言简单来说C语言就是一门计算机语言,广泛应用与底层开发,使用...
    99+
    2023-07-02
  • c语言 指针零基础讲解
    1.指针是什么(可能有点难理解) 指针的是啥? 指针实际上就是地址,地址就是系统给定的编号,编号就是一个个内存单元。 在某种情况来说指针=地址=编号=内存单元。 指针就是地址,顾名思...
    99+
    2024-04-02
  • Go语言基础知识点介绍
    Go 语言教程 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thom...
    99+
    2024-04-02
  • Go语言中指针的知识点有哪些
    今天小编给大家分享一下Go语言中指针的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 什么是指针指针是存储其...
    99+
    2023-07-04
  • C语言基础指针详解教程
    目录1.1:概述1.1.1:内存1.1.2:内存1.1.3:指针和指针变量1.2:指针基础知识1.2.1:指针变量的定义和使用1.2.2:通过指针间接修改变量的值1.2.3:指针的大...
    99+
    2024-04-02
  • C语言学习之指针知识总结
    目录一、地址二、指针与指针变量三、指针的作用四、初学指针时常见的错误五、通过调用函数修改主调函数中的值六、指针与一维数组七、使用函数操作一维数组八、指针变量所占字节数九、静态数组的缺...
    99+
    2024-04-02
  • C/C++指针知识点有哪些
    本篇内容介绍了“C/C++指针知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基础部分关于内存内存含义:存储器:计算机的组成中,用...
    99+
    2023-06-03
  • Go语言基础知识点有哪些
    这篇文章主要介绍Go语言基础知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Go 语言教程Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Gries...
    99+
    2023-06-20
  • Go语言基础之指针
    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。 Go语言中的指针 任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一...
    99+
    2023-08-30
    golang 开发语言 后端
  • C语言基础野指针与空指针示例分析
    目录一:野指针野指针的成因1. 指针未初始化2. 指针越界访问3 .指针释放后未置空规避野指针1. 初始化指针 2. 避免指针越界 3 避免返回局部变量的地址 4. 开辟的指针释放后...
    99+
    2024-04-02
  • C语言学习基础知识分享
    目录写在前面为何学习C语言语言层面个人层面初识C语言什么是语言标准hellowordmainprintf数据类型byte & bitsizeof常量常量分类变量定义变量变量的...
    99+
    2023-01-28
    c语言入门自学零基础 c语言入门教程 c语言入门基础知识
  • C语言基础知识分享续篇
    目录写在前面数组数组使用函数字符串strlen && sizeofsizeofstrlen转义字符操作符选择语句if elseswitch循环语句forwhiledo...
    99+
    2023-01-28
    c语言入门自学零基础 c语言入门教程 c语言入门基础知识
  • Python语言常用基础知识点有哪些
    这篇文章主要讲解了“Python语言常用基础知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python语言常用基础知识点有哪些”吧!python编程中常用的12种基础知识总结:正...
    99+
    2023-06-15
  • Python基础语法(Python基础知识点)
    Python与Perl,C和Java语言等有许多相似之处。不过,也有语言之间有一些明确的区别。本章的目的是让你迅速学习Python的语法。 第一个Python程序: 交互模式编程: 调用解释器不经过脚本文件...
    99+
    2022-06-04
    基础 知识点 语法
  • 零基础详解C语言指针进阶
    目录前言1.字符指针例题 12.指针数组例题 23.数组指针3.1数组指针的定义3.2 &数组名与数组名3.3 数组指针的使用4.数组与指针在函数里的传参4.1 一维数组的传...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作