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

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

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

先看结论再代码验证:

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

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

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

以下是本人的代码验证:

复制代码
#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 a3; int aa23

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

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

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

相关推荐
地平线开发者5 小时前
【模型轻量化专题】衡量模型轻量性的指标
算法
学习星球8 小时前
OFDM技术精讲:正交性推导、循环前缀原理与80行Python链路仿真(附实测数据)
算法·面试·前端框架
alphaTao14 小时前
LeetCode 每日一题 2026/8/24-2026/8/30
python·算法·leetcode
Interview Aid11214 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
顶点多余1 天前
那些在算法中适合巩固的知识点---1
java·前端·算法
罗西的思考1 天前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
hahaha60161 天前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
多弗朗皮卡丘1 天前
算法详解4:买卖股票的最佳时机系列(上)
算法
sakiko_1 天前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
自小吃多1 天前
器件移动、旋转、镜像、对齐、等间距操作笔记
笔记·嵌入式硬件