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个编码。

相关推荐
SmartRadio4 分钟前
MK8000(UWB射频芯片)与DW1000的协议适配
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·dw1000
guygg885 分钟前
基于捷联惯导与多普勒计程仪组合导航的MATLAB算法实现
开发语言·算法·matlab
fengfuyao9856 分钟前
遗传算法与粒子群算法求解非线性函数最大值问题
算法
LeetCode天天刷20 分钟前
【软件认证】比特翻转【滑动窗口】
算法
源代码•宸22 分钟前
Leetcode—1123. 最深叶节点的最近公共祖先【中等】
经验分享·算法·leetcode·职场和发展·golang·dfs
s砚山s26 分钟前
代码随想录刷题——二叉树篇(十三)
数据结构·算法
hkNaruto26 分钟前
【AI】AI学习笔记:关于嵌入模型的切片大小,实际的业务系统中如何选择
人工智能·笔记·学习
alphaTao30 分钟前
LeetCode 每日一题 2026/1/5-2026/1/11
算法·leetcode
山上三树31 分钟前
详细介绍 C 语言中的 #define 宏定义
c语言·开发语言·算法
麻雀1231 小时前
win7中编译qemu-system-arm,仿真arm设备
c语言·eclipse