指针回顾.

news2024/11/15 3:31:07

指针的主要作用:提供一种间接访问数据的方法

    1.地址:区分不同内存空间的编号
    2.指针:指针就是地址,地址就是指针
    3.指针变量:存放指针的变量称为指针变量,简称为指针

1.指针的定义

    int *p = NULL;
    int *q = NULL;
    char *p = NULL;
    double *p = NULL;
    struct student *p = NULL;

    野指针:指向随机空间的指针
    空指针:指向内存地址为0x0的空间的指针

    注意:定义指针一定要初始化,防止成为野指针 

2.指针的运算

   * : *p作为右值:获得指针指向空间中的值 
       *p作为左值:将右值放入指针指向的空间
   &  :获得一个变量在内存空间中的首地址

   p+1:向内存高地址偏移指向的数据类型大小个字节空间
    p-q:两个地址中间差了多少个指向的数据类型

3.指针数组和数组指针

数组和指针用法的区别:

  1. 存储数据使用数组
  2. 操作数据使用指针

数组指针:

        对比 int  (*a)[5]; 和  int a [5];
      

int (*a)[5]

  • 这是一个指针,指向一个包含5个整数的数组。
  • a 是一个指针,指向一个包含5个整数的数组,可以通过 *a 访问这个数组。
  • 定义一个指针变量 a, 占8个字节空间,指向20个字节空间


       

 int a[5] = {1, 2, 3, 4, 5};

  • 这是一个包含5个整数的一维数组
  • a 是一个包含5个整数的数组,可以直接通过下标访问数组元素。
  • 这种声明适用于一维数组,用于存储一组整数值。

int a[5] ={1,2,3,4,5};
        a == &a[0] == int *

数组名本质上是一个指向数组第一个元素的指针常量
     
  数组名需要注意的点   :  大部分情况下 a 可以理解为int*型,有2种特殊情况除外


            1.sizeof运算时  
                sizeof(a): 20
                sizeof(int *): 8
            2.&运算符
                &a:   int (*)[5]
                &int *: int ** 

        数组指针特点:
            1.对一维数组,数组名&得到数组指针,值不变,类型升级为指向整个数组的指针
            2.对数组指针*,值不变,类型降级为指向数组第一个元素的指针

指针数组 

 int *a[5];
        定义一个数组a,有5个元素,每个元素为int *型,占40个字节空间

        char *pstr[5];

        操作多个字符串时,通过将每个指针指向一个字符串开头,

        完成对所有字符串的操作,使用指针数组

        指针数组和二维数组的区别:
            存储字符串数组使用二维数组
            操作字符串数组使用指针数组

#include <stdio.h>

int main(void)
{
	int *p = NULL;
	int a[5] = {1, 2, 3, 4, 5};

	p = a + 2;
	printf("*p1 = %d\n", *p);

	p = (int *)(&a + 1) - 1;
	printf("*p2 = %d\n", *p);

	return 0;
}

运行结果为: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1901467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多功能工具网站

江下科技在线应用-免费PDF转换成Word-word转pdf-无需下载安装 (onlinedo.cn)https://www.onlinedo.cn/

AI对于高考和IT行业的深远影响

目录 AI对IT行业的冲击及深远影响1. 工作自动化2. 新的就业机会3. 行业融合4. 技术升级和创新5. 数据的重要性 IT行业的冬天要持续多久&#xff1f;大学的软件开发类专业是否还值得报考&#xff1f;其他问题IT行业是否都是加班严重&#xff1f;35岁后就业困难是否普遍现象&…

大数据中的常见数据问题:独断脏

想象你刚刚入职一家声称正在进行"数字化转型"的大型企业,担任大数据开发工程师。在入职的第一周,你满怀热情,迫不及待地想要大展拳脚,用你的技能来推动公司的数据驱动决策。 目录 大数据中的常见数据问题1. 独 - 数据孤岛2. 断 - 数据价值链断层3. 缺 - 标准、治理…

C++初学者指南-4.诊断---地址检测器

C初学者指南-4.诊断—地址检测器 幻灯片 地址检测器&#xff08;ASan&#xff09; 适用编译器g,clang检测内存错误 内存泄露访问已经释放的内存访问不正确的堆栈区域 用额外的指令检测代码 运行时间增加约70%内存使用量大约增加了3倍 示例&#xff1a;检测空指针 使用地址…

【全图文教程】如何安装MySQL

一、官网下载MySQL 打开MySQL官方下载页&#xff1a;https://dev.mysql.com/downloads/installer/ 二、安装MySQL 点击下载下来的安装包&#xff0c;进入安装界面。 选择Custom&#xff08;自定义安装&#xff09;, 因为有些应用我们可能用不到。 选择要安装的服务, 并…

跨越语言的界限:Vue I18n 国际化指南

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 国际化简介 vue-i18n 安装和配置 创建语言包 基本使用 切换语言 动态翻…

在 PostgreSQL 中,如何处理大规模的文本数据以提高查询性能?

文章目录 一、引言二、理解 PostgreSQL 中的文本数据类型三、数据建模策略四、索引选择与优化五、查询优化技巧六、示例场景与性能对比七、分区表八、数据压缩九、定期维护十、总结 在 PostgreSQL 中处理大规模文本数据以提高查询性能 一、引言 在当今的数据驱动的世界中&…

在Ubuntu 22.04 LTS 上安装 MySQL两种方式:在线方式和离线方式

Ubuntu安装MySQL 介绍&#xff1a; Ubuntu 是一款基于Linux操作系统的免费开源发行版&#xff0c;广受欢迎。它以稳定性、安全性和用户友好性而闻名&#xff0c;适用于桌面和服务器环境。Ubuntu提供了大量的软件包和应用程序&#xff0c;拥有庞大的社区支持和活跃的开发者社区…

Chair Footrest Protective Cover

Chair Footrest Protective Cover 万能通用型椅子脚垫保护套凳子耐磨硅胶加厚垫桌椅脚垫防滑静音套

如何使用HippoRAG增强LLM的记忆

大型语言模型&#xff08;LLM&#xff09;已经证明是一种非常宝贵的思考工具。经过大量文本、代码和其他媒体数据集的训练&#xff0c;它们能够创作出接近人类水平的文章、翻译语言、生成图像&#xff0c;还能以信息丰富的方式回答人们提出的问题&#xff0c;甚至可以编写不同类…

JSP WEB开发(一) JSP语言基础

目录 JSP JSP简介&#xff1a; JSP页面 JSP运行原理 JSP脚本元素 JAVA程序片 局部变量 全局变量和方法的声明 全局变量 方法的声明 程序片执行特点 synchronized关键字 表达式 JSP指令标记 page指令 include指令 JSP动作标记 JSP动作元素include和include指令的…

pandas中 groupby分组详解 1

引言 在一个使用 pandas 做数据分析的项目过程中&#xff0c;再次深刻理解了一下 pandas 中使用 groupby 进行分组的一些细节问题&#xff0c;以及对想要做的操作如何实现&#xff0c;在此记录&#xff1b; 问题 1&#xff1a;groupby 分组查看分组结果&#xff0c;以及重设分…

生物化学笔记:电阻抗基础+电化学阻抗谱EIS+电化学系统频率响应分析

视频教程地址 引言 方法介绍 稳定&#xff1a;撤去扰动会到原始状态&#xff0c;反之不稳定&#xff0c;还有近似稳定的 阻抗谱图形&#xff08;Nyquist和Bode图&#xff09; 阻抗谱图形是用于分析电化学系统和材料的工具&#xff0c;主要有两种类型&#xff1a;Nyquist图和B…

Ratf协议图解、Nacos CP集群源码分析

文章目录 Nacos CP集群说明Raft协议leader选举重新选举leader多个Candidate情况更新操作&#xff0c;日志复制网络分区 源码实现服务注册leader选举leader心跳包 Nacos CP集群 说明 CAP原则 C 一致性 ConsistencyA 可用性 Availability分区容错性 Partition tolerance 分区…

在 PostgreSQL 中,如何处理数据的版本控制?

文章目录 一、使用时间戳字段进行版本控制二、使用版本号字段进行版本控制三、使用历史表进行版本控制四、使用 RETURNING 子句获取更新前后的版本五、使用数据库触发器进行版本控制 在 PostgreSQL 中&#xff0c;处理数据的版本控制可以通过多种方式实现&#xff0c;每种方式都…

文档去重(TF-IDF,MinHash, SimHash)

2个doc有些相似有些不相似&#xff0c;如何衡量这个相似度&#xff1b; 直接用Jaccard距离&#xff0c;计算量太大 TF-IDF: TF*IDF TF&#xff1a;该词在该文档中的出现次数&#xff0c; IDF&#xff1a;该词在所有文档中的多少个文档出现是DF&#xff0c;lg(N/(1DF)) MinHash …

利用级数公式计算圆周率(π)

π是是指圆的周长与直径的比值&#xff0c;是无限不循环小数&#xff0c;有很多种方法可以求得它的近似值。这里用比较容易实现的关于π的无穷级数来求它的前10000位的取值。 π / 2 π 具体的&#xff0c;用两个字符数组x,z分别存放当前计算得到的pi值&#xff0c;数组…

Android面试题自定义View之Window、ViewRootImpl和View的三大流程

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 View的三大流程指的是measure(测量)、layout(布局)、draw(绘制)。 下面我们来分别看看这三大流程 View的measure(测量) MeasureSpec Measur…

前后端的导入、导出、模板下载等写法

导入&#xff0c;导出、模板下载等的前后端写法 文章目录 导入&#xff0c;导出、模板下载等的前后端写法一、导入实现1.1 后端的导入1.2 前端的导入 二、基础的模板下载2.1 后端的模板下载-若依基础版本2.2 前端的模板下载2.3 后端的模板下载 - 基于资源文件读取2.4 excel制作…

CTFShow的RE题(二)

逆向5 附件无后缀&#xff0c;查一下是zip&#xff0c;解压得到一个exe一个dll文件。 往下继续看 但也根进去看看 发现是在加载的dll文件 还有一个返回时调用的函数 发现是打印函数 根据以往的经验应该是要跳转到这里&#xff0c;动调一下。 发现exe链接了dll&#xff0c;…