指向一维数组的指针   char (*p)[10] ;
指向一维数组的指针类型 typedef  char(*TYPE_P2ARRAY)[10]  ;   
该指针可以指向数组 ,且使用起来效果节本相同,但指针与数组并不等价。{sizeof结果不同  , 且该指针还可以指向除此之外其他类型的数据。 }

  1. #include <stdio.h>
  2.  
  3. typedef int (*TP_PARRY1)[3] ;
  4.  
  5. #define Uart_Printf printf
  6. void f1(void)
  7. {
  8. int a[2][3] = { {0,1,2},{10,11,12}};
  9. // a : 二维数组名 , equal : 指向一维数组{0,1,2}的指针
  10. TP_PARRY1 p = a;
  11. int (*q)[3] = a;
  12.  
  13. //int (*t)[2] = a;//warning: initialization from incompatible pointer type
  14. //int** x = a; // CRITICAL ERROR, may lead to Segmentation fault. NO space for PTRs.
  15.  
  16. //指针结合律:1 (*q)括号最高优先级,表示q是一个指针。
  17. // 2 向右 [] , 表示指向一个数组
  18. // 3 右边没有了,向左,表示该数组的元素是int型。
  19. Uart_Printf("a00:%d\n",a[0][0]);
  20. Uart_Printf("a01:%d\n",a[0][1]);
  21. Uart_Printf("a02:%d\n",a[0][2]);
  22. Uart_Printf("a10:%d\n",a[1][0]);
  23. Uart_Printf("a11:%d\n",a[1][1]);
  24. Uart_Printf("a12:%d\n",a[1][2]);
  25. Uart_Printf("p00:%d\n",a[0][0]);
  26. Uart_Printf("p01:%d\n",a[0][1]);
  27. Uart_Printf("p02:%d\n",a[0][2]);
  28. Uart_Printf("p10:%d\n",a[1][0]);
  29. Uart_Printf("p11:%d\n",a[1][1]);
  30. Uart_Printf("p12:%d\n",a[1][2]);
  31.  
  32. Uart_Printf("q00:%d\n",a[0][0]);
  33. Uart_Printf("q01:%d\n",a[0][1]);
  34. Uart_Printf("q02:%d\n",a[0][2]);
  35. Uart_Printf("q10:%d\n",a[1][0]);
  36. Uart_Printf("q11:%d\n",a[1][1]);
  37. Uart_Printf("q12:%d\n",a[1][2]);
  38.  
  39. #if 0
  40. //Segmentation fault
  41. Uart_Printf("x00:%d\n",x[0][0]);
  42. Uart_Printf("x01:%d\n",x[0][1]);
  43. Uart_Printf("x02:%d\n",x[0][2]);
  44. Uart_Printf("x10:%d\n",x[1][0]);
  45. Uart_Printf("x11:%d\n",x[1][1]);
  46. Uart_Printf("x12:%d\n",x[1][2]);
  47. #endif
  48.  
  49. }
  50.  
  51. int main()
  52. {
  53. f1();
  54. }
  55. /*
  56. root@oucaijun:/work/dcc# gcc *.c; ./a.out
  57. a00:0
  58. a01:1
  59. a02:2
  60. a10:10
  61. a11:11
  62. a12:12
  63. p00:0
  64. p01:1
  65. p02:2
  66. p10:10
  67. p11:11
  68. p12:12
  69. q00:0
  70. q01:1
  71. q02:2
  72. q10:10
  73. q11:11
  74. q12:12
  75. */

  

二维数组(数组名与地址的关系)

先定义一个二维数组array以及指向它的指针p_array:

char array[3][1000] ;

typedef char CHAR_ARRY2[3][1000] ;  
typedef CHAR_ARRY2* PCHAR_ARRY2 ;
PCHAR_ARRY2 p_array= &array;
 
 
十进制绝对地址
指向元素 指向一维数组
指向一维数组
指向一维数组
指向二维数组
十六进制地址
872369208 array[0]
&array[0]
array
p_array[0]
p_array
33FF4C38
872369209
array[0]+1
 
 
 
 
33FF4C39
.
.
.
.
 
 
 
 
 
 
 
 
 
872370208
 
&array[0]+1
array+1
p_array[0]+1
 
33FF5020
.
.
.
 
 
 
 
 
 
872372208
 
 
 
 
p_array+1
33FF57F0

array ==&array[0]

 

c语言,指针与数组--指针与二维数组2的更多相关文章

  1. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  2. 【C语言】构造长度可变的二维数组

    #include <stdio.h> #include <malloc.h> #include <memory.h> int getArray(int ***p,i ...

  3. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...

  4. 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作

    二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...

  5. 【C语言入门教程】4.2 二维数组

    C 语言允许使用多维数组,即使用多组小标的数组,二维数组是最常用的多维数组.多维数组在内存中存放数据的顺序与一维数组相同,使用连续的存储单元. 4.2.1 二维数组的一般形式 二维数组的一般声明形式为 ...

  6. c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点

    //题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. // #include "stdio.h" #include <stdli ...

  7. C语言 一维数组叠加为二维数组样例

    这里参看memcpy的用法,将一个一维整型数组不停的叠加为二维数组 使用宏定义来控制二维数组的行列 代码如下: #include <stdio.h> #include <stdlib ...

  8. C语言程序,找出一个二维数组的鞍点。

    什么是鞍点????? 鞍点就是在一个二维数组中,某一个数在该行中最大,然而其在该列中又是最小的数,这样的数称为鞍点. 昨天突然在书上看到这样的一道题,就自己尝试着写了一个找出一个二维数组中的鞍点. 好 ...

  9. [zt]C++二维数组讲解、二维数组的声明和初始化

    定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...

  10. C++入门经典-例6.12-使用数组地址将二维数组输出

    1:以a[4][3]为例 a代表二维数组的地址,通过指针运算符可以获取数组中的元素 (1)a+n代表第n行的首地址 (2)&a[0][0]既可以看作第0行0列的首地址,同样也可以被看作是二维数 ...

随机推荐

  1. python3基本框架

  2. design pattern factory method #Reprinted#

    引入人.工厂.和斧子的问题: (1),原始社会时,劳动社会基本没有分工,需要斧子的人(调用者)只好自己去磨一把斧子,每个人拥有自己的斧子,如果把大家的石斧改为铁斧,需要每个人都要学会磨铁斧的本领,工作 ...

  3. known good die( KGD) /确认好裸芯片,合格芯片

    英文:known good die( KGD) / 中文:确认好裸芯片,合格芯片 完工的晶圆上有许多晶片存在,其单一品质有好有坏,经过老化试验后,其确知电性能良好的晶片即称为己知好晶片.不过,已知好晶 ...

  4. 转:C++中引用传递与指针传递区别

    从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...

  5. python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...

  6. 如何修改Sublime 侧边栏Sidebar的颜色

    参考自:http://blog.csdn.net/a497393102/article/details/10563791 首先要找到 Default.sublime-theme 文件, 点击 subl ...

  7. HashMap,LinkedHashMap,TreeMap的区别(转)

    Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快 ...

  8. iOS 请求数据 error

    解决办法如下: 0x1 ->请求数据时加上缺少的类型 AFHTTPSessionManager *manager = [selfAFHTTPSessionManager];//    manag ...

  9. [GDUT 决赛]--GCD,LCM——我是好人(数论)

    Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你两个数n和m,问你有多少对正整数对最大公约数是n,最小公倍数是m最后友情提供解题代码(我真是太好人了) void sol ...

  10. java数组中的三种排序方法中的冒泡排序方法

    我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...