码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C语言指针操作·八大总结


    在这里插入图片描述

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 


    文末附八大详细总结 


    学习日记

    目录

    学习日记

    前言​编辑

    一、指针的含义 

    二、 一个地址型的数据实际上包含3个信息 

    三、有关指针变量的归纳比较

    四、指针运算 

    指针变量加(减)一个整数

    指针变量赋值

    两个指针变量可以相减

    两个指针变量比较

    空值

    五、指针的优点

    C语言指针操作


    前言

            指针这里分为八个小部分,分别是“指针变量”、“通过指针引用数组”、“*通过指针引用多维数组”、“通过指针引用字符串”、“*指向函数的指针”、“*返回指针值的函数”、“*指针数组和多重指针”、“*动态内存分配与指向它的指针变量” 。   

    一、指针的含义 

            “指针”是C语言中一个形象化的名词,形象地表示“指向”的关系,其在物理上的实现是通过地址来完成的。

    &a是变量a的地址,也可称为变量a的指针。

    指针变量是存放地址的变量,也可以说,指针变量是存放指针的变量。

    指针变量的值是一个地址,也可以说,指针变量的值是一个指针。

    指针变量也可称为地址变量,它的值是地址。

    &是取地址运算符,&a是a的地址,也可以说,&是取指针运算符。

    &a是变量a的指针(即指向变量a的指针)。

    数组名是一个地址,是数组首元素的地址,也可以说,数组名是一个指针,是数组首元素的指针。

    函数名是一个指针(指向函数代码区的首字节),也可以说函数名是一个地址(函数代码区首字节的地址)。

    函数的实参如果是数组名,传递给形参的是一个地址,也可以说,传递给形参的是一个指针。

    二、 一个地址型的数据实际上包含3个信息 

    ① 表示内存编号的纯地址。

    ② 它本身的类型,即指针类型。

    ③ 以它为标识的存储单元中存放的是什么类型的数据,即基类型。

    1. int a;
    2. /* &a为a的地址,它就包括以上3个信息,它代表的是一个整型数据的地址,int是&a的基类型(即它指向的是int型的存储单元)。&a就是“指向整型数据的指针类型”或“基类型为整型的指针类型”,其类型可以表示为“int *”型。*/

    要区别指针和指针变量。指针就是地址,而指针变量是用来存放地址的变量。

    对于指针变量来说,把谁的地址存放在指针变量中,就说此指针变量指向谁。

    1. int a,*p; //p是int*型的指针变量,基类型是int型
    2. float b;
    3. p=&a; //a是int型,合法
    4. p=&b; //b是float型,类型不匹配

    void *指针是一种特殊的指针,不指向任何类型的数据。如果需要用此地址指向某类型的数据,应先对地址进行类型转换。

    三、有关指针变量的归纳比较

    变量定义

    类型表示

    含义

    int i;

    int

    定义整型变量i

    int *p;

    int *

    定义p为指向整型数据的指针变量

    int a[5];

    int [5]

    定义整型数组a,它有5个元素

    int *p[4];

    int *[4]

    定义指针数组p,它由4个指向整型数据的指针元素组成

    int (*p)[4];

    int (*)[4]

    p为指向包含4个元素的一维数组的指针变量

    int f();

    int ()

    f为返回整型函数值的函数

    int *p();

    int *()

    p为返回一个指针的函数,该指针指向整型数据

    int (*p)();

    int (*)()

    p为指向函数的指针,该函数返回一个整型值

    int **p;

    int **

    p是一个指针变量,它指向一个指向整型数据的指针变量

    void *p;

    void *

    p是一个指针变量,基类型为void(空类型),不指向具体的对象

    四、指针运算 

    指针变量加(减)一个整数

    p++;		//将该指针变量的原值(是一个地址)和它指向的变量所占用的存储单元的字节数相加
    

    指针变量赋值

    将一个变量地址赋给一个指针变量。 不应把一个整数赋给指针变量。

    1. p=&a; //将变量a的地址赋给p
    2. p=array; //将数组array首元素地址赋给p
    3. p=&array[i]; //将数组array第i个元素的地址赋给p
    4. p=max; //max为已定义的函数,将max的入口地址赋给p
    5. p1=p2; //p1和p2是基类型相同指针变量,将p2的值赋给p1

    两个指针变量可以相减

    如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数。

    两个指针变量比较

    若两个指针指向同一个数组的元素,则可以进行比较。指向前面的元素的指针变量“小于”指向后面元素的指针变量。如果p1和p2不指向同一数组则比较无意义。

    空值

            指针变量可以有空值,即该指针变量不指向任何变量。 NULL是一个符号常量,代表整数0。在stdio.h头文件中对NULL进行了定义:#define NULL 0 它使p指向地址为0的单元。系统保证使该单元不作它用(不存放有效数据)。

            p的值为NULL与未对p赋值是两个不同的概念。前者是有值的(值为0),不指向任何变量,后者虽未对p赋值但并不等于p无值,只是它的值是一个无法预料的值,也就是p可能指向一个事先未指定的单元。

    五、指针的优点

    提高程序效率;

    在调用函数时当指针指向的变量的值改变时,这些值能够为主调函数使用,即可以从函数调用得到多个可改变的值;

    可以实现动态存储分配。

    如果使用指针不当,会出现隐蔽的、难以发现和排除的故障。因此,使用指针要十分小心谨慎。

    C语言指针操作

    C语言指针操作(一)指针变量

    C语言指针操作(二)通过指针引用数组

    C语言指针操作(三)*通过指针引用多维数组 

    C语言指针操作(四)通过指针引用字符串

    C语言指针操作(五)*指向函数的指针

    C语言指针操作(六)*返回指针值的函数

    C语言指针操作(七)*指针数组和多重指针 

    C语言指针操作(八)*动态内存分配与指向它的指针变量

  • 相关阅读:
    大端模式与小端模式
    2022-04-25-ElasticSearch
    Elasticsearch(三) Python 使用 elasticsearch 的基本操作
    软件开发程序员的“九阳神功”——设计模式
    深入解读:从DDIM到Improved Denoising Diffusion Probabilistic Models
    快速拿下 AI Prompt 工程师证书攻略!
    「网页开发|前端开发|Vue」10 vuex模块化:将数据划分成不同modules分别管理
    Linux学习之远程拷贝数据命令
    计算机毕业论文java毕业设计选题源代码基于javaweb实现的客运站网上售票系统
    Spark Core个人总结
  • 原文地址:https://blog.csdn.net/m0_63794226/article/details/126617644
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号