深入理解二维数组

 1 #include<stdio.h>
 2 #define debug 0
 3 int main()
 4 {
 5     int a[3][4]={{8,2,6,4},{1,4,7,9}},i,j;
 6     #if debug
 7     a++;
 8     a[0]++;
 9     a[1]++;
10     a[2]++;
11     a[3]++;
12     #endif
13     printf("a:%p      a+1:%p\n\n",a,a+1);//相差16字节
14
15     printf("a[0]:%p  a[0]+1:%p  &a[0][1]=%p\n",a[0],a[0]+1,&a[0][1]);
16     printf("a[1]:%p  a[1]+1:%p  &a[1][1]=%p\n",a[1],a[1]+1,&a[1][1]);
17     printf("a[2]:%p  a[2]+1:%p  &a[2][1]=%p\n",a[2],a[2]+1,&a[2][1]);
18     printf("a[3]:%p  a[3]+1:%p  &a[3][1]=%p\n",a[3],a[3]+1,&a[3][1]);
19     return 0;
20 }//a[0] ,a[1],a[2],a[3]是一维数组名,代表一维数组的起始地址,是地址常量
21 //a+1和a的地址差16个字节,相当于四个元素,a代表第一行的地址,a+1代表第二行的地址。
22 /*a[0]+1和a[0]的地址差4个字节,相当于1个数组元素。因此a[0]+1相当于元素a[0][1]的地址
23 a[1]+1=&a[1][1],a[2]+1=&a[2][1] */

时间: 2024-08-25 12:22:33

深入理解二维数组的相关文章

理解二维数组指针

数组指针中有三条规律(适用于任何维数数组):(来源于李戈老师的计算概率) 数组名相当于指向数组第一个元素的指针: &E相当于把E的管辖范围上升了一个级别: *E相当于把E的管辖范围下降了一个级别: 我再增加一条,[]也是把管辖区域下降一个级别. 这三条规律真的很好用! 如果a是一维数组的名字,a指向数组首元素a[0],a+1指向第二个元素,a等于&a[0]; 如果a是二维数组的名字,a指向数组首元素a[0],即第一行,a+1指向第二个元素,即第二行,a等于&a[0]. 举个例子:

【收藏】如何理解二维数组

https://www.cnblogs.com/cdp1591652208/p/6971386.html https://blog.csdn.net/qq_18152813/article/details/81207539 原文地址:https://www.cnblogs.com/ericling/p/11926923.html

直观理解C语言中指向一位数组与二维数组的指针

一维数组和指针: 对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我

C语言之二维数组

二维数组及其指针 1 ) 在了解二维数组之前,我们先来了解一维数组及其指针 我们知道,一维数组中:数组名代表-->数组首元素的首地址    (千万不要认为是数组的首地址(&a),绝对不是) 在内存中,该代码的表现形式如下图:</span> #include<stdio.h>   {         int a[4];         int *p  = a;  //表明该指针指向了数组的首元素地址,当然也可以写为 int *p = &a[0];        

C语言笔记(二维数组与数值指针)

一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数组来代替.但是在实际的应用中,有时候使用二维数组会更加直观,方便程序的编程. (3)两者在内存使用效率上是一模一样的. 二.二维数组的第一维和第二维概念 (1)例如 int a[2][5]中,前面的2表示第一维:后面的5表示第二维 (2) 二维数组的第一维表示最外部的那一层,第一维本身也是一个数组,

二维数组的认识及其表示元素的两种方式

/* ============================================================================ Name : TeatArr.c Author : lf Version : Copyright : Your copyright notice Description : 二维数组的认识以及其表示元素的两种方式 备注说明 1 要理解二维数组的存储方式. 2 实际上利用a[i][j]的方式并不"正统",这是这靠近我们的 常识一些

Swift语言学习No.2: 二维数组

之前在教程中学习了二维数组,原本里面很多知识点都不甚了解,后来经过一番资料查找,基本上理解透彻了,做个总结吧. 老规矩,先上代码: class Array2D<T> { let columns: Int let rows: Int var array: Array<T?> init(columns: Int, rows: Int) { self.columns = columns self.rows = rows array = Array<T?>(count:rows

二维数组知多少

有的实际问题一维数组是无法解决的,所以引入二维数组甚至是多维数组,这里着重讨论一下二维数组,如果深刻理解二维数组多维数组也就迎刃而解. 1. 二维数组的定义:例如现在有3支球队,每支队有5个人,要充分表达每个人便可以引入二维数组,例如a[0][0]就表示第一支队伍的第一个人.这里的a便是数组名,第一个[0]表示第一支队伍,第二个[0]表示第一支队伍里的第一个人.根据此类比喻可以根据条件要求将二维数组扩展为多维数组. 2. 二维数组在内存中布局:我们可以把二维数组的布局想象成表格,第一行表格便是第

二维数组(声明以及遍历)

首先图面理解二维数组(数组里面的元素不是字符或者数字类型而是另外一个数组)! 一,二维数组的声明 int[ ] [ ] arr; 初始化一个能存3个一维数组的二维数组 arr = new int [3] [ ];  (此时只声明了一个二维数组的空间,并没有声明一维数组的空间哈!!) 赋值: [3]赋值 int[] arr1 = {1,3,4,5}; int[] arr2 = {1,3,4}; int[] arr3 = {2,1,6,4}; arr[0] = arr1; arr[1] = arr2