C语言中数组与指针偏移

2023-05-16

今天在单位被同事问到指针指向数组的问题,回来敲代码总结一下。先给出代码如下:

#include <stdio.h>

int main()
{
    int a[3][2]= {1,2,3,4,5,6};
    int *p, *q;
    long int *m;

    p = &(a[0][0]);
    q = a[0];
    m = (long int *)a;

    printf("a address: %p\n",a);
    printf("p address: %p; q address: %p\n",p,q);
    printf("p+1 address: %p; q+1 address: %p; m+1 addrress: %p\n",p+1,q+1,m+1);
    printf("%d,%d,%d\n",*p, *q,(int)*m);
    printf("%d %d,%d\n",*(p+1),*(q+1),(int)*(m+1));
    printf("%d\n",**(a+1));

    printf("%lu\n",sizeof(int));
    printf("%lu\n",sizeof(long int));
    return 0;
}

在上面的代码中定义了一个二维数组a[3][2],指针p,q都指向该数组的首地址。
对于指针来说,不管数组时几维的,地址在它眼里都是一块儿连续的地址空间,所以指针的累加仅仅时按照它的长度进行偏移。所以p+1,q+1之后,指向的时数组a[0][1]的值。
而对于数组本身来说,数组a[3][2]其实时定义而了长度维3的数组,而每个数组恰好有两个元素,所以数组a+1时,指向了数组a[1][0]的地址空间。

ps:在测试编译发现好多wanning,总结如下:
1. sizeof()函数的返回值为无符号长整型,所以printf的时候需要用格式化:lu
2. 上面定义了一个long int的m指针,那么m+1时候,其实时按照long int的长度进行偏移的。printf的时候也应该时long int的类型,为了正确显示数组中的值,我们这里对其进行强制转换为int类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中数组与指针偏移 的相关文章

  • 北醒激光雷达模组 资料汇总

    目录 1 文档说明1 1 北醒单点系列雷达激光模组相关资料1 2 北醒面阵系列雷达激光模组相关资料1 2 1 产品基本介绍1 2 2 Benewake 北醒 短距 TF LC02 2m资料整理1 2 3 Benewake 北醒 短距 TF
  • TFmini Plus在开源飞控PX4上的应用

    TFmini Plus在开源飞控PX4上的应用 PX4有着自己独特的优势 xff0c 受到广大爱好者的喜爱 TFmini Plus是北醒公司推出的性价比极高的激光雷达 xff0c 受到广大爱好者的追捧 本文介绍TFmini Plus和PX4
  • Benewake TFmini-S\TFmimi Plus\TFluna\TF02-Pro 串口版本雷达在STM32的例程

    目录 文档说明北醒串口标准通讯协议硬件接线Lidar通讯代码1 初始化USART1 2 开启USART1的空闲中断 3 USART2 IRQHandler增加中断判断4 中断处理函数 xff0c 用于接收雷达数据 协议处理注 xff1a 换
  • 使用CH341 I2C连接北醒TF系列I2C模式 Python例程

    目录 硬件接线 xff1a 源码结果输出 本文介绍了北醒单点系列雷达IIC模式下使用CH341芯片转接板读取雷达数据的例程 例程下载 xff1a 链接 https pan baidu com s 1KVJ fINxUgKZny2Gdi8T2
  • 蓝牙nrf51822程序的分析(一)

    蓝牙nrf51822程序的分析 一 最近继续用NRF51822开发一个东西 无奈之前没接触过蓝牙 连蓝牙串口模块也没有 所以对蓝牙的基础知识不够 xff0c 后面看了之后接着补充 花了2天时间把提供的NRF51822的程序大致看明白了 xf
  • 常用Arduino板介绍

    目录 NANO板介绍烧录说明 UNO板介绍烧录说明 Pro mini板介绍烧录说明 DUE板介绍烧录说明 NANO板介绍 概述 xff1a Arduino Nano是一款基于ATMega328P xff08 Arduino Nano 3 x
  • Modbus设备在Modbus scan上面的使用方法

    操作教程 参数 xff1a DeviceID xff1a 485从站 寄存器地址 xff1a 查询设备地址表 北醒雷达Dist在0x0000开始 读取寄存器长度 xff1a 雷达数据长度值 格式 xff1a MODBUS RTU 串口协议
  • Raspberry Pi Pico C/C++语言在Windows环境下开发环境搭建 Raspberry Pi Pico C/C++ SDK

    目录 前言Raspberry Pi Pico介绍需要支持的软件软件安装配置及注意事项ARM GCC compiler的安装CMake的安装Git 安装Visual Studio 2019的安装Visual Studio Code的配置Pyt
  • 【LoRa32U4II】介绍以及基于Arduino IDE编译环境搭建及测试

    目录 LoRa 模块LoRa32u4 II介绍LoRa32u4 II 资料下载LoRa32u4 II 规格介绍LoRa32u4 II 脚位说明 编译环境介绍电脑系统编译软件Arduino需求库 编译环境搭建及测试LoRa32u4 II 测试
  • 【Benewake(北醒) 】短距 TF-LC02 2m资料整理

    目录 1 TF LC02简要说明1 1 性能参数1 2产品图片及尺寸 2 运用2 1 在开源板Arduino上的运用2 2 在Python上的应用 1 TF LC02简要说明 1 1 性能参数 1 2产品图片及尺寸 2 运用 2 1 在开源
  • 【Arduino】Benewake(北醒) TF-LC02(TTL)基于Arduino 开发板运用说明

    目录 前言Benewake 北醒 TF LC02产品简要说明Arduino开发板介绍Benewake 北醒 TF LC02 接口及通讯协议说明接口定义串口协议说明通讯协议说明功能码说明 接线示意图例程说明配置软硬串口定义获取TOF数据的结构
  • 【Benewake(北醒) 】中距 TF02-i 40m工业版本CAN/485介绍以及资料整理

    目录 1 前言2 产品介绍3 产品快速测试3 1 产品规格书及使用说明书3 2 通用指令串口助手使用说明3 3 产品快速测试说明 4 基于开源硬件的运用整理4 1 在开源飞控上的运用 5 基于其他的运用整理5 1 在PLC上的运用说明5 2
  • 【ESP32 DEVKIT_V1】基于Arduino IDE环境搭建

    目录 一 前言二 板子介绍三 环境搭建1 Arduino IDE的安装2 在Arduino IDE上添加外包链接3 添加好外包链接后就可以下载对应的板子库文件 测试1 先把开发板接到电脑 xff0c 并在Arduino IDE上选择对应的开
  • 【ESP32 DEVKIT_V1】北醒TF系列雷达在ESP32 DEVKIT_V1开发板上的运用

    目录 前言一 硬件准备二 硬件接线说明串口接线示意图 xff1a I2C接先示意图 三 软件搭建及测试1 使用Arduino IDE编译教程2 使用vsCode 43 Arduino教程2 1 在vsCode上使用Arduino的环境搭建2
  • 【vsCode + Arduino】在Visual Studio Code编译Arduino项目

    目录 前言一 参考文档二 操作步骤2 1 安装Arduino IDE2 2 在vsCode里安装Arduino插件2 3 配置arduino的安装路径2 4 配置好后打开一个Arduino的项目文件夹进行相应的配置 三 目前已知问题 前言
  • 蓝牙:GATT,属性,特性,服务

    接着上一篇 通用属性配置文件 xff08 Generic Attribute Profile xff09 1 GATT简介 通用属性配置文件Generic Attribute Profile简称GATT GATT定义了属性类型并规定了如何使
  • RS232 RS422 RS485详细介绍

    1 RS 232 C RS 232 C是美国电子工业协会EIA xff08 Electronic Industry Association xff09 制定的一种串行物理接口标准 RS是英文 推荐标准 的缩写 xff0c 232为标识号 x
  • stm32串口使用以及串口中断接收不定长度字符串

    开始使用cubemx配置PA9 PA10分别为TX RX端 xff0c 在使能串口中断 之后其余值直接使用默认的就可以了 点击生成代码即可 span class token class name uint8 t span rx buff s
  • STM32-串口通信printf重定向

    前言 xff1a 平时我们进行c语言编程的时候会经常用到printf函数进行打印输出 xff0c 来调试代码 可是这个printf函数C库已经帮我们实现好了 xff0c 通常只需要直接调用即可 xff0c 但是如果在一个新的开发平台 xff

随机推荐

  • FMCW毫米波雷达原理

    Radar系列文章 传感器融合是将多个传感器采集的数据进行融合处理 xff0c 以更好感知周围环境 xff1b 这里首先介绍毫米波雷达的相关内容 xff0c 包括毫米波雷达基本介绍 xff0c 毫米波雷达数据处理方法 xff08 测距测速测
  • VMware虚拟机安装ubuntu16.04系统教程

    对于没有接触过Ubuntu系统的小伙伴来说 xff0c 直接在物理机上安装Ubuntu单系统或者windows Ubuntu双系统一件比较刺激的事情 xff0c 因为一不小心可能就会把电脑整崩溃 xff0c 或者出现各种问题 xff0c 所
  • c#实验五 文件与流

    实验五 文件与流 WPF还不太会 抄STZG的 xff0c 其他自己写的 一 实验目的 掌握文件类的使用 xff1b 掌握文件流的操作 xff1b 掌握二进制数据 文本数据的读写 xff1b 继续应用WPF技术进行界面编程 二 实验内容 要
  • 简易入门MFC

    工作需要用到MFC xff0c 需要能快速上手 xff0c 中间碰到不懂的简单的看了下源码 xff0c 参考了些资料 目标 xff1a 做一个简单的计算器 xff0c 代码就不考虑了 xff0c 主要强调如何上手MFC xff0c 和简单了
  • Problem: 美丽的黄山 (指针)

    Description 众所周知 xff0c 黄山市一片山 xff08 而不是一座山 xff09 假设这些山排成了一排 xff0c 每座山有各自的高度 现在游客们从最左边看山 xff0c 有些山因为高度没有它左边的某座山高 xff0c 就会
  • (冒泡排序) Problem: 并列排名

    冒泡排序原理就是 xff1a 如果有n个数 xff0c 相邻的两个数进行比较 xff0c 就是1号和2号 xff0c 2号和3号 n 1号和n号比较 xff0c 每次比较确定一个数的位置 也就是第一个轮回比较n 1次 xff0c 第二个就比
  • 基于51单片机蓝牙直流电机控制(IR2104S驱动H桥)

    主要目标 xff1a xff08 1 xff09 用51系列单片机作为控制器 xff1b xff08 2 xff09 采用由四个MOS管组成的H桥电机驱动电路 xff0c 并由IR2104S来驱动H桥 xff1b xff08 3 xff09
  • 排序(链表)

    首先说一下程序运行时间的计算 xff1a 一般法则 xff1a 法则1 for循环 xff1a 一次 for 循环的运行时间至多是该 for 循环内语句 xff08 包括测试 xff09 的运行时间乘以迭代次数 法则2 嵌套的for循环 x
  • STM32F407的UART4配置

    复用PC10 PC11作为串口四的TX RX void uart4 init u32 bound GPIO InitTypeDef GPIO InitStructure USART InitTypeDef USART InitStructu
  • Java安装并输出hello world

    首先下载安装包 xff1a https www oracle com technetwork java javase downloads index html xff08 官网地址 xff09 xff08 我这里是Windos系统 xff0
  • Pixhawk WIFI模块Station模式配置

    Pixhawk WIFI模块配置 最近在鼓捣Pixhawk的飞控 xff0c 用来控制双桨的无人船 xff0c 固件刷的最新的ArduRover4 0 0 xff0c 经过扒论坛 xff0c 现场调试 xff0c 终于能让一艘船按照航点前行
  • cmake之获取字目录名list

    宏函数 按照需求 查找目录名称集合 span class token function macro span span class token punctuation span SUBDIRLISTINCLUDE result curdir
  • 【初级C语言】文件结构(头文件结构,头文件作用,头文件被重复包含的问题)

    一 头文件 1 头文件的作用 1 不用在各个源文件中做重复的声明 2 组织项目结构的时候 xff0c 减少大型项目的维护成本 xff08 修改了定义 xff0c 只需修改头文件中对应的声明 xff09 3 通过头文件来调用库功能 在很多场合
  • 解决datax抽mysql数据到hdfs之null值变成‘‘(引号)的问题

    在抽数据的过程中会发现 xff1a mysql的null值通过datax抽取到hdfs xff0c 会变成引号 xff0c 这不是我们所需要的 xff0c 所以需要修改一下datax的源码 如图所示 xff1a recordList add
  • MT7688双摄像头双电机驱动小车(1)环境搭建

    设计目标 xff1a 实现一个带双摄像头 xff0c 可实现远程无线监控 xff0c 控制的小车 其他 xff1a 1 监控具体的作用还为定义 2 硬件需要设计为可拓展性 xff0c 方便后续增加功能 实现方案 xff1a 这里的方案主要指
  • 输入一个字符串,删除其中所有的数字,所有大写字母改成小写,其他不变,并输出

    span class hljs preprocessor include lt stdio h gt span span class hljs title int span main int i j int k char span clas
  • 输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.

    span class hljs comment include lt stdio h gt span span class hljs keyword int span span class hljs keyword push span ch
  • C函数与汇编函数之间参数及返回值传递方法

    AAPCS对ARM结构的一些标准做了定义 xff0c 在这里我们只重点介绍函数调用部分 xff0c 如图8所示 xff0c AAPCS为ARM的R0 R15寄存器做了定义 xff0c 明确了它们在函数中的职责 xff1a 图 8 AAPCS
  • 软件看门狗和硬件看门狗

    看门狗 xff0c 又叫watchdog timer xff0c 从本质上来说就是一个定时器电路 xff0c 一般有一个输入和一个输出 xff0c 其中的输入叫做喂狗 xff0c 输出一般连接到另外一个部分的复位端 xff0c 另外一个部分
  • C语言中数组与指针偏移

    今天在单位被同事问到指针指向数组的问题 xff0c 回来敲代码总结一下 先给出代码如下 xff1a span class hljs comment include lt stdio h gt span span class hljs key