zoukankan      html  css  js  c++  java
  • 一维数组和二维数组及多维数组思考

     0 /* 篇1:此篇可能过于繁琐,快速可转下看 篇2 */
    1
    //***************************************** 2 //( 一纬数组为列指针,指向某元素的存储单元,二纬数组为行指针,指向一整行) 3 //***************************************** 4 // *》 指向一维数组的指针 5 // int a[1]; /* 一维数组 */ 6 // a; /* 数组名为数组的首地址 */ 7 // (a + i); /* 因为是一维数组,数组首地址 偏移i个(数组类型)的单位字节 */ 8 // *( a + i ) = a[i]; /* 取地址为 (a+i) 的存储单元的值 */ 9 // /* 符号“*”与 符号“[]”可做等价变换,因为数组的命名关系,[]只是命名,借以方便代码。 */ 10 /* 首地址 + " [常量表达式] " 表示 首地址 偏移 常量个存储单元 ( 所有的变量名都是地址!而C语言则是把变量名映射为里面的值使用 ) */ 11 //***************************************** 12 // *》 指向多维数组的指针 13 // int a[2][3]; /* 二纬数组 */ 14 // a; /* a为二纬数组的首地址 */ 15 // a+i; /* a是二维数组、首行、首列的首地址;为了避免这种多义性 */ 16 // *(a+i); // 为了消除多义性 17      // 二纬数组定义为行指针,*(a+i) 等价于 a[i] (取行数组中偏移i行的行) 18 // *( *(a+i)+j ) = (*(a+i))[j] = *(a[i]+ j) = a[i][j]; 19 // /* 二维数组中的行指针,*(a+i),为什么不使用 ( (a+i)+j ) 直接作为地址呢,因为经过运算就为 (a+i+j) 不能表示其二维性,因此加 * 作为纬度的标志,但是会让普通人产生歧义 */ 20 // /* 或者 说对单独维数组进行操作则有隐性规则,每一纬隐性的被定义为单独数组,因此可以采用"*"去取隐性单纬数组的元素,而此元素又是(此维度值+1)维度数组的首地址,从另外一个侧面解释了我们计算机是一维结构 */ 21 // //1、取的行指针偏移i行的地址 22 // //2、在1的基础上,再取得列指针偏移j列的地址 23 // //3、得到地址即得到存储单元的值 24 25 //***************************************** 26 // *》N维数组计算的逻辑规律 27 // 例如 :char[1][2][3].....[n]; 28 // 例子所示为n纬数组,运算 优先级为 1->2->3->....->n,在同一括号且括号外加*,表示在同一纬度,跨括号表示跨纬, 29 30 // *》写入一个值 // 前提:每个 存储单元 对应一个 物理地址 31 // 例如:a=4; 32 // 步骤:1、a在系统中代表的某个地址 2、内部机器通过a地址找到对应的存储单元 3、向对应的存储单元写入值3 33 // *》读一个值 34 // 例如:&a,*b //前期:存储单元中存的是内容或地址 35 // 作用:& :取得 a在系统中代表的某个地址 36 // 作用:* :取得 a在系统中代表的某个地址 的存储单元的值
     0 /* 篇2 */
    1
    /************************************* 2 *程序功能:二维数组到指针变量四种用法 3 *程序作者:Chanmo Foo 4 *程序时间:2018/11/09 9:59 5 *************************************/ 6 /************************************* 7 *程序备注: 8 *1:*a=&b; *和&可以互相抵消 9 *2:&a[1][2] = a[1]+2 &和[]互相抵消 10 *3:1、2是熟练掌握后,表达式到不同写法而已。 11 *************************************/ 12 #include<stdio.h> 13 14 int main(void){ 15 16 int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 17 int (*p)[4],i,j; 18 p = a; 19 20 /* //way-1 21 for( i = 0; i < 3; i++ ){ 22 for( j = 0; j < 4; j++ ){ 23 printf("%d ", p[i][j]); 24 } 25 printf(" "); 26 } 27 */ 28 29 /* //way-2 30 for( p; p < a+3; p++ ){ 31 for( i = 0; i < 4; i++ ){ 32 printf("%d ", *( *p+i ) ); 33 } 34 printf(" "); 35 } 36 */ 37 38 /* //way-3 39 for( p; p < a+3; p++){ 40 for( j=0; j < 4; j++){ 41 printf("%d ", (*p)[j] ); 42 } 43 printf(" "); 44 } 45 */ 46 47 /* //way-4 48 for( i=0; i < 3; i++){ 49 for( j=0; j < 4; j++) 50 printf("%d ", *( p[i]+j ) ) ; 51 printf(" "); 52 } 53 */ 54 return 0; 55 }
    本文由作者原创,如需转载注明出处!
  • 相关阅读:
    https://www.cnblogs.com/aademeng/category/1042475.html
    python中重要的模块--asyncio 转载
    await这个关键词以及asyncio.wait asyncio.gather
    async get_event_loop
    麦克米伦7000
    [GO]errorr接口的使用
    [GO]断言
    [GO]空接口
    [GO]接口的转换
    [GO]接口的嵌用继承
  • 原文地址:https://www.cnblogs.com/Fsiswo/p/9925568.html
Copyright © 2011-2022 走看看