当前位置: 首页 > news >正文

c语言笔记 一维数组与二维数组

1.一维数组和二维数组名加1代表什么意思,偏移多少单位?

方法:+1就是以数组的元素类型的字节为单位去偏移。

先看结论再代码验证:

  1. 一维数组名+1表示加一个整型单位的偏移量,也可以这么理解+1就是以数组的元素类型的字节为单位去偏移。
  2. 二维数组名+1 表示加int []单位的字节去偏移,同时也是表示下一个元素单位。+1就是偏移到下一个元素。因为是二维数组所以偏移到第二个元素后是代表第二个元素的地址,那么此时再去*解引用,会得到第二个元素里面第一个元素的地址,例如 int a[2][3]; a+1的地址等于*(a+1),虽然它们的地址一样但是表达的含义不一。

二维数组-----> a+1 表示偏移到第二个元素的地址

  1. *(a+1)表示偏移到第二个元素后在第二个元素地址的基础上,取第二个元素里面元素的地址。(二维数组里面的元素是一维数组)这本质上就是一个缩小和放大。此时再去偏移它就是偏移4个字节为单位了.
  2. *(a+1)+1表示二维数组的第二个元素,取第二个元素.进到该数组里面,去偏移1个单位(4个字节),得到第二个元素中的第二个元素的地址。
  3. *(*(a+1)+1)再解引用表示去里面的数据,因为地址已经被解剖到不能再解剖了,最后一步就是取地址.也等价于a[1][1];

以下是本人的代码验证:

#include <stdio.h>int main()
{int a[2] = {1, 2};printf("%p\n", a);//首元素地址printf("%p\n", a + 1);//首元素地址+4字节int aa[2][3] = {{1, 2, 3}, {4, 5, 6}};printf("%p\n", aa);//首元素地址printf("%p\n", aa + 1);//首元素地址+12字节printf("-------\n");printf("%p\n", aa + 1);//首元素地址+12字节printf("%p\n", *(aa + 1));//首元素地址+12字节return 0;
}

2.一维数组和二维数组的数组名取地址+1代表什么意思,偏移多少单位?

        先初始化 int a[3]; int aa[2][3]

        方法:+1都是表示以类型的字节为单位去偏移

        一维数组:&a代表取整体的地址,&a+1 代表整体的地址偏移一个单位,一个单位就是该类型的字节,int [3]就是12个字节为单位,

        二维数组:&a代表整个二维数组的地址,&a+1表示整体的地址都搬走,那么该二维数组的类型是 int [2][3]也就是 24个字节,所以一个单位就是24个字节。距离基地址有24个编码。


http://www.mrgr.cn/news/93671.html

相关文章:

  • 【Tools】Windows下Git 2.48安装教程详解
  • [数据抓取] Python 网络爬虫 - 学习手册
  • 硬件基础(4):(1)AD采集电路设计
  • 使用express创建服务器保存数据到mysql
  • 【Linux】权限相关知识点
  • GPU编程实战指南01:CUDA编程极简手册
  • P6412题解
  • 前端快速搭建Node服务(解决跨域问题)
  • HCIA复习拓扑实验
  • 【项目日记(十)】瓶颈分析与使用基数树优化
  • 快乐数 力扣202
  • FreeSWITCH 之 chat
  • π0及π0_fast的源码剖析——核心模块src的全面分析与解读:如何实现PaLI-Gemma、如何去噪生成动作
  • ROS分布式部署通信
  • C#类型转换基本概念
  • 【江协科技STM32】ADC数模转换器-学习笔记
  • 考研数一非数竞赛复习之Stolz定理求解数列极限
  • 【CVPR2025】 EVSSM:用状态空间模型高效去模糊
  • LINUX网络基础 [五] - HTTP协议
  • 【深度学习】宠物品种分类Pet Breeds Classifier