二维数组居然是个类似于二级指针(pointer to pointer)的东西,十分震惊!

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[][]={{,,,},{,,,},{,,,}};
  5. printf("&a:%d,&a[0]:%d \n",&a,&a[]);
  6. printf("a:%d,a[0]:%d \n",a,a[]);
  7. printf("*a:%d,*a[0]:%d \n",*a,*a[]);
  8. printf("**a:%d \n",**a);
  9. return ;
  10. }

运行结果:

&a:2686672,&a[0]:2686672
a:2686672,a[0]:2686672
*a:2686672,*a[0]:1
**a:1

由此可见 a[0][0]是一个整型变量,a[0]是一个指针(pointer),a是个二级指针(pointer to pointer)

并且a,a[0],a[0][0]的地址是相同的,但a依然是指向a[0]地址的指针,a[0]依然是指向a[0][0]的指针

因此二维数组的操作也变复杂点了,以下一道题用以验证及训练

设有如下数组定义: int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 计算下面各项的值(设一个int类型数占四个字节)。

  1. 1a[2][1] 2a[1] 3a 4a+1
  2. 5)*a+1 6)*(a+1) 7a[2]+1 8)*(a+1)+1
  3. 9)*(*(a+2)+2
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[][]={{,,,},{,,,},{,,,}};
  5. printf(" a[1]:%d \n a:%d \n *a:%d \n a+1:%d \n *a+1:%d \n *(a+1):%d \n a[2]+1:%d \n *(a+1)+1:%d \n",a[],a,*a,a+,*a+,*(a+),a[]+,*(a+)+);
  6. printf(" *(*(a+2)+2):%d \n",*(*(a+)+));
  7. return ;
  8. }

运行结果:

a[1]:2686688
a:2686672
*a:2686672
a+1:2686688
*a+1:2686676
*(a+1):2686688
a[2]+1:2686708
*(a+1)+1:2686692
*(*(a+2)+2):21

小结:

二级指针 指针     整型变量

a    →    a[0] → a[0][0]

a[1] → a[1][0]

a[2] → a[2][0]


可以推广到一维数组就是一个指针,三维数组是个三级指针了

验证一维数组是指针(pointer)

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[]={,,};
  5. printf("&a:%d,&a[0]:%d \n",&a,&a[]);
  6. printf("a:%d,a[0]:%d \n",a,a[]);
  7. printf("*a:%d \n",*a);
  8. return ;
  9. }

运行结果:

&a:2686708,&a[0]:2686708
a:2686708,a[0]:1
*a:1

二维数组是二级指针pointer to pointer!的更多相关文章

  1. C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)

    前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...

  2. C++ 二维数组(双重指针作为函数参数)

    本文的学习内容参考:http://blog.csdn.net/yunyun1886358/article/details/5659851 http://blog.csdn.net/xudongdong ...

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

    一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数 ...

  4. C语言二维数组中的指针问题

    #include "stdio.h" void main() { int a[5][5]; int i,j; for (i=0;i<5;i++) { for (j=0;j&l ...

  5. 论C语言中二级指针和二维数组之间的区别

    刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...

  6. C/C++二维数组名和二级指针

    转载 :https://blog.csdn.net/wu_nan_nan/article/details/51741030  作者:吴一奇 1. 指针1.1 一个指针包含两方面:a) 地址值:b) 所 ...

  7. [转] C语言多维数组与多级指针

    http://c.biancheng.net/cpp/html/477.html 多维数组与多级指针也是初学者感觉迷糊的一个地方.超过二维的数组和超过二级的指针其实并不多用.如果能弄明白二维数组与二级 ...

  8. C/C++怎样传递二维数组,转载自CSDN

    用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). [以下转帖] ---------------------- ...

  9. C/C++如何传递二维数组?

    用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). ----------------------------- ...

随机推荐

  1. JS深入理解系列(一):编写高质量代码

    在for循环中,你可以循环取得数组或是数组类似对象的值,譬如arguments和HTMLCollection对象.通常的循环形式如下: // 次佳的循环for (var i = 0; i < m ...

  2. 九度OJ 1150:Counterfeit Dollar(假美元) (分析、检验)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:485 解决:215 题目描述: Sally Jones has a dozen Voyageur silver dollars. Howev ...

  3. django url匹配过程

    ROOT_URLCONF root URLconf module urlpatterns “include” other URLconf modules chops off whatever part ...

  4. $CLASS('page__hd')[0].style.backgroundColor="red"

    const $ID = (p) => document.getElementById(p)const $CLASS = (p) => document.getElementsByClass ...

  5. 这种实现方式比使用 += 要更节省内存和 CPU,尤其是要串联的字符串数目特别多的时候。

    这种实现方式比使用 += 要更节省内存和 CPU,尤其是要串联的字符串数目特别多的时候. package main import ( "bytes" "fmt" ...

  6. cocos2d-js v3.1的坑

    前几天因为要用到cc.pool,所以就换了v3.1版本,结果连生成apk的出错(cocos code ide), log显示为:error: relocation overflow in R_ARM_ ...

  7. [容易]在O(1)时间复杂度删除链表节点

    题目来源:http://www.lintcode.com/zh-cn/problem/delete-node-in-the-middle-of-singly-linked-list/

  8. cron表达式(转)

    原文地址:http://www.cnblogs.com/linjiqin/archive/2013/07/08/3178452.html Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或 ...

  9. 《程序员代码面试指南》第八章 数组和矩阵问题 数组的partition 调整

    题目 数组的partition 调整 java代码 package com.lizhouwei.chapter8; /** * @Description: 数组的partition 调整 * @Aut ...

  10. ES6中的class 与prototype

    一.定义构造函数 在以前的js中,生成一个对象实例,需要先定义构造函数,然后通过prototype 的方式来添加方法,在生成实例: function Person(){ this.name = &qu ...