C语言基础(六)

C语言基础

  • 指针与一维数组
    • 总结
  • * p++、* (p++)、(\*p)++、* ++p、*(++p)、++*p区别和用法
    • 运算优先级
    • ++p与p++区别
      • *p++与 *(p++)与(*p)++
      • *++p与 *(++p)与 ++*p
  • 指针常量与一维数组的关系
  • 指针变量与一维数组的关系
    • 数组在子函数中弱化为指针
  • 指针常量与二维数组的关系
  • 数组指针
    • 定义
    • 数组指针与一维数组的关系
    • 数组指针与二维数组的关系
  • 指针数组
    • 定义
    • 指针数组与二维数组关系

指针与一维数组

指针+1,加到哪里?加多大?

  • 指针常量算术运算的偏移量取决于指针指向的数据类型大小
    在这里插入图片描述

总结

  • p+n:相当于指针p向地址增大方向移动n个数据(数据大小=sizeof(指向的数据类型)),p可以为指针常量或者指针变量
  • p-n:相当于指针p向地址减小方向移动n个数据(数据大小=sizeof(指向的数据类型)),p可以为指针常量或者指针变量
  • p++:指针p向地址增大方向移动1个数据(数据大小=sizeof(指向的数据类型)),p为指针变量
  • p–:指针p向地址减小方向移动1个数据(数据大小=sizeof(指向的数据类型)),p为指针变量
  • p-q:(p和q的指针类型需要匹配)两个指针之间相差的数据个数(十六进制p-q的差值)/sizeof(指向的数据类型)
    在这里插入图片描述
    注意:
    1、指针的算术运算需要操作连续的空间地址才有意义
    2、p是指针变量,可以++或者–(指针常量不可)

* p++、* (p++)、(*p)++、* ++p、*(++p)、++*p区别和用法

运算优先级

  • *与++两种运算符的优先级相同,都是从右向左结合
    在这里插入图片描述

在这里插入图片描述

++p与p++区别

++p:先自增再取值
p++:先取值再自增

*p++与 *(p++)与(*p)++

  • *p++
    1、按从右至左的运算顺序结合,p先与++结合
    2、又因p++,是先赋值后++,因此p先与*结合
    3、先取值 * p ,之后再对p++做自增操作

在这里插入图片描述

  • *(p++)
    1、先算小括号里面,p先与++结合
    2、又因p++,是先赋值后++,因此p先与*结合
    3、先取值*p,之后再对p++做自增操作
    在这里插入图片描述
  • (*p)++
    1、因括号优先级高,先算括号内,先取值*p
    2、然后再对取出的值加1
    在这里插入图片描述

*++p与 *(++p)与 ++*p

  • *++p
    1、从右至左结合,先++p,对指针p先自加,指向下一个地址
    2、再取值
    在这里插入图片描述
  • ++*p
    1、先与*结合,先取值
    2、再对所取的值进行加1
    在这里插入图片描述
  • *(++p)
    1、先小括号,对指针p,先自增
    2、再取值
    在这里插入图片描述
    eg:
    在这里插入图片描述

指针常量与一维数组的关系

在这里插入图片描述
在这里插入图片描述
不可以对指针常量++
在这里插入图片描述

指针变量与一维数组的关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

printf有表达式的时候,为右结合原则
当i=0时,右结合原则,*(p++)先小括号,但p++是先赋值后自加,即先取值p=1,后p加加指向arr[1];*(p+i)为arr[1]的值为2;p[i]为2;arr[0],(arr+i)正常输出;当前p指向arr[1];
当i=1时,右结合原则,*(p++)先小括号,但p++是先赋值后自加,即先取值p=2,后p加加指向arr[2];*(p+i)为arr[3]的值为4;p[i]为4;arr[0],(arr+i)正常输出;当前p指向arr[3];
当i=2时,右结合原则,*(p++)先小括号,但p++是先赋值后自加,即先取值p=3,后p加加指向arr[3];*(p+i)越界;p[i]为越界;arr[0],(arr+i)正常输出;

数组在子函数中弱化为指针

void input(int *p, int m)
//可以在子函数中像main函数一样操作数组,操作的是同一片地址
void input(int a[], int m)
void input(int a[100], int m)

指针常量与二维数组的关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:

  1. a,&a,a[0],&a[0],&a[0] [0],值都是相同的(都是首地址),但其意义不同
    a(指针常量——整个二维数组名) 数据类型是 int(*)[3] 此时a这个指针常量指向一维数组a[0]
    a[0] (指针常量——整个一维数组名) 数据类型int * 此时a[0]这个指针常量指向a[0] [0]
  2. 为什么a不是int**类型?
    a[0]是int *类型,指向是一个int类型,如果是二级指针,a+1移动4/8字节,实质上发现移动12字节,
    此时证明a不是二级指针
  3. a指向a[0],a[0]指向a[0] [0]

数组指针

本质:指针
概念:指向数组的指针

定义

<存储类型> 数据类型 指针名;
int (*p)[3];

  • p先跟*结合,表示p的本质是一个指针
  • 数据类型:p所指向的数组里面的元素的数据类型

数组指针p的数据类型:int () [3]
数组指针p指向的数据类型:int [3]
tip: []的优先级高于
的优先级
p先和*结合,*代表指针,此时这就是一个数组指针
p先和[]结合,[]代表数组,此时这就是一个指针数组

数组名p

  1. 数组首元素地址 int * (地址常量)
  2. 整个数组 int [3] (变量)

数组指针与一维数组的关系

在这里插入图片描述
在这里插入图片描述
数组指针对其+1,直接移动一整个一维数组,指向数组底部,容易产生数组越界问题,因此一般不使用数组指针操作一维数组。

在这里插入图片描述

数组指针与二维数组的关系

在这里插入图片描述
在这里插入图片描述

指针数组

本质:数组
概念:由指针组合起来的数组,数组中的元素都是指针类型

定义

<存储类型> 数据类型 数组名[元素个数];
int* a[3];
//a先跟[]结合,表示a的本质是一个数组
//数据类型:a数组中的元素的数据类型

指针数组a的数据类型:int* [3]
指针数组保存的数据类型:int*

在这里插入图片描述
在这里插入图片描述

指针数组与二维数组关系

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

002 仿muduo库实现高性能服务器组件_整体框架

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言项目框架小结 前言 本文不会包含任何项目模块的代码&#xff0c;旨在向你介绍项目具体分为哪几个模块&am…

文档档案管理系统整体建设方案书(实际项目原件word2024)

1.系统概述 1.1.需求描述 1.2.需求分析 1.3.重难点分析 1.4.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 数据备份技术 3.系统功能设计 3.1.功能清单列表 3.2.基础数据管理 3.3.位置管理 3.4.文档使用 3.5.文档管理 软件全套资料包获取方式①&#xff1a;软件项…

揭秘 淘宝死店采集私信筛选,号称日赚500+

淘宝死店采集工具为电子商务创业者揭示了一个领域的新机遇&#xff0c;通过提供一系列深入分析和资源挖掘的功能&#xff0c;展现了从失败中寻找成功之道的独特方法论。以下是如何通过这种工具寻找电商平台中的隐含机会的几个关键方面&#xff1a; 分析失败的深层原因&#x…

【启程Golang之旅】深入解析函数的奥秘与技巧

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

html5+css3+js学习记录(1)-- html

1 vscode前端插件 1.1 Web标准 2 文档声明与字符编码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

【全开源】海报在线制作系统源码(ThinkPHP+FastAdmin+UniApp)

打造个性化创意海报的利器 引言 在数字化时代&#xff0c;海报作为一种重要的宣传媒介&#xff0c;其设计质量和效率直接影响着宣传效果。为了满足广大用户对于个性化、高效制作海报的需求&#xff0c;海报在线制作系统源码应运而生。本文将详细介绍海报在线制作系统源码的特…

【电子元件】TL431 电压基准

TL431(C23892)是一种常用的可调节精密电压基准和电压调节器。它广泛应用于电源管理、精密参考电压和稳压电路等领域。以下是TL431的一些关键特点和使用方法&#xff1a; 关键特点 可调输出电压&#xff1a;TL431的输出电压可以通过外部电阻网络在2.495V到36V范围内调整。精度高…

【知识图谱】探索攻略:基础、构建、高级应用与相关论文方向

【知识图谱】相关文章汇总 写在最前面一、什么是知识图谱&#xff1f;二、相关历史文章代码实现&#xff1a;简单的知识图谱可视化知识图谱前身&#xff1a;信息抽取知识图谱应用1&#xff1a;社交网络分析知识图谱应用2&#xff1a;威胁情报挖掘知识图谱应用3&#xff1a;Code…

当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

人类最友好语言? YAML 深入解析:从语法到最佳实践

什么是YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化语言。它的设计目标是使数据在不同编程语言之间交换和共享变得简单。YAML采用了一种简洁、直观的语法&#xff0c;以易于阅读和编写的方式表示数据结构。 YAML广泛应用于配置文…

Elasticsearch的Index sorting 索引预排序会导致索引数据的移动吗?

索引预排序可以确保索引数据按照指定字段的指定顺序进行存储&#xff0c;这样在查询的时候&#xff0c;如果固定使用这个字段进行排序就可以加快查询效率。 我们知道数据写入的过程中&#xff0c;如果需要确保数据有序&#xff0c;可能需要在原数据的基础上插入新的数据&#…

Youngter-drive

BUUCTF逆向题Youngter-drive-CSDN博客 逆向每日一题----Youngter-drive题解-CSDN博客 借鉴博客,写得比我好 upx拖壳 upx -d Youngter-drive.exe 这道题我不知道为什么,我这里是运行不了的,也没有找到原因 int __cdecl main_0(int argc, const char **argv, const char **env…

进程信号(1)

目录 一、信号 1.1、生活中的信号 1.2、Linux中的信号 二、信号处理常见方式 三、信号的产生 3.1、简单理解信号的保存和发送 3.2、键盘产生信号 3.3、核心转储 3.4、系统调用接口产生信号 3.4.1、kill 3.4.2、raise 3.4.3、abort 3.5、软件条件产生信号 3.6、硬…

网络编程-TCP

一、TCP的相关IP 1.1 SeverSocket 这是Socket类,对应到网卡,但是这个类只能给服务器使用. 1.2 Socket 对应到网卡,既可以给服务器使用,又可以给客户端使用. TCP是面向字节流的,传输的基本单位是字节. TCP是有连接的,和打电话一样,需要客户端拨号,服务器来听. 服务器的内核…

【Linux】为 VMware 的 Linux 系统(CentOS 7)设置静态IP地址

文章目录 准备工作查看 子网掩码 和 网关IP确认准备设置的虚拟机端口没有被占用 调整设置编辑配置文件配置文件说明 完成配置&#xff0c;准备测试使用命令终端连接服务器 我是一名立志把细节说清楚的博主&#xff0c;欢迎【关注】&#x1f389; ~ 原创不易&#xff0c; 如果有…

redis--消息队列

分类 生产者消费模式 发布者订阅模式 生产者消费模式 在生产者消费者(Producer/Consumer)模式下&#xff0c;上层应用接收到的外部请求后开始处理其当前步骤的操作&#xff0c;在执行完成后将已经完成的操作发送至指定的频道(channel)当中&#xff0c;并由其下层的应用监听…

开发公众号自定义菜单之创建菜单

文章目录 申请测试账号换取Token接口测试提交自定义菜单查看效果校验菜单配置清空菜单配置结束语 申请测试账号 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?actionshowinfo&tsandbox/index 或 得到appid和secret 换取Token 使用appid和secret换取token令牌…

嵌入式实时操作系统笔记1:RTOS入门_理解简单的OS系统

今日开始学习嵌入式实时操作系统RTOS&#xff1a;UCOS-III实时操作系统 本次目标是入门RTOS&#xff0c;理解多任务系统...... 本文只是个人学习笔记&#xff0c;基本都是对网上资料的整合...... 目录 STM32裸机与RTOS区别&#xff1a; 裸机中断示例&#xff1a; RTOS对优先级…

飞鸡:从小训练飞行的鸡能飞行吗?为什么野鸡能飞吗?是同一品种吗?今天自由思考

鸡的飞行能力在很大程度上受到其生理结构的限制。尽管鸡有翅膀&#xff0c;但与能够长时间飞行的鸟类相比&#xff0c;鸡的翅膀相对较小&#xff0c;且胸部肌肉较弱。再加上鸡的身体较重&#xff0c;这些因素共同限制了鸡的飞行能力。通常&#xff0c;鸡只能进行短暂的、低空的…

Redis简介与安装到python的调用

前言 本文只不对redis的具体用法做详细描述&#xff0c;做简单的介绍&#xff0c;安装&#xff0c;和python代码调用详细使用教程可查看一下网站 https://www.runoob.com/redis/redis-tutorial.html https://pypi.org/project/redis/ 官方原版: https://redis.io/ 中文官网:…