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

#include <stdio.h>

typedef int (*TP_PARRY1)[3] ;

#define Uart_Printf printf
void f1(void)
{
int a[2][3] = { {0,1,2},{10,11,12}};
// a : 二维数组名 , equal : 指向一维数组{0,1,2}的指针
TP_PARRY1 p = a;
int (*q)[3] = a; //int (*t)[2] = a;//warning: initialization from incompatible pointer type
//int** x = a; // CRITICAL ERROR, may lead to Segmentation fault. NO space for PTRs. //指针结合律:1 (*q)括号最高优先级,表示q是一个指针。
// 2 向右 [] , 表示指向一个数组
// 3 右边没有了,向左,表示该数组的元素是int型。
Uart_Printf("a00:%d\n",a[0][0]);
Uart_Printf("a01:%d\n",a[0][1]);
Uart_Printf("a02:%d\n",a[0][2]);
Uart_Printf("a10:%d\n",a[1][0]);
Uart_Printf("a11:%d\n",a[1][1]);
Uart_Printf("a12:%d\n",a[1][2]);
Uart_Printf("p00:%d\n",a[0][0]);
Uart_Printf("p01:%d\n",a[0][1]);
Uart_Printf("p02:%d\n",a[0][2]);
Uart_Printf("p10:%d\n",a[1][0]);
Uart_Printf("p11:%d\n",a[1][1]);
Uart_Printf("p12:%d\n",a[1][2]); Uart_Printf("q00:%d\n",a[0][0]);
Uart_Printf("q01:%d\n",a[0][1]);
Uart_Printf("q02:%d\n",a[0][2]);
Uart_Printf("q10:%d\n",a[1][0]);
Uart_Printf("q11:%d\n",a[1][1]);
Uart_Printf("q12:%d\n",a[1][2]); #if 0
//Segmentation fault
Uart_Printf("x00:%d\n",x[0][0]);
Uart_Printf("x01:%d\n",x[0][1]);
Uart_Printf("x02:%d\n",x[0][2]);
Uart_Printf("x10:%d\n",x[1][0]);
Uart_Printf("x11:%d\n",x[1][1]);
Uart_Printf("x12:%d\n",x[1][2]);
#endif } int main()
{
f1();
}
/*
root@oucaijun:/work/dcc# gcc *.c; ./a.out
a00:0
a01:1
a02:2
a10:10
a11:11
a12:12
p00:0
p01:1
p02:2
p10:10
p11:11
p12:12
q00:0
q01:1
q02:2
q10:10
q11:11
q12:12
*/

  

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

先定义一个二维数组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. JavaScript基础知识----document对象

    对象属性document.title                 //设置文档标题等价于HTML的<title>标签document.bgColor               //设 ...

  2. python成长之路9——socket和socketserver

    IPC:进程间通信 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具 ...

  3. matrix67:kmp算法详解

    个人认为KMP是最没有必要讲的东西,因为这个东西网上能找到很多资料.但网上的讲法基本上都涉及到“移动(shift)”.“Next函数”等概念,这非常容易产生误解(至少一年半前我看这些资料学习KMP时就 ...

  4. linux常用命令加实例大全

    目  录引言    1一.安装和登录    2(一)    login    2(二)    shutdown    2(三)    halt    3(四)    reboot    3(五)    ...

  5. OJ python答题结果"返回非零"

    最近在OJ上用python答题,偶尔会遇到结果“放回非零”的情况(Non-zero Exit Code) 总结了以下,目前知道的是这些: 1. 在python2中用了input(),或在python3 ...

  6. 雪佛兰Suburban_百度百科

    雪佛兰Suburban_百度百科 雪佛兰Suburban

  7. lines(最大区间和)

    lines Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. IIS express 7.5 配置和多网站执行

    iis express7.5 支持xp 以上的操作系统,能够解决xp.iis的问题. 首先先下载安装iisexpress7.5地址是id=1038">点击打开链接下载完毕点击安装就可以 ...

  9. Data Structure(2)

    在大体看过一遍<数据结构导论>的基础上完成了上一篇的博客,周五晚上通过上讲课,还是发现了一些问题的,主要体现在对第一章看的比较粗心,第一章的概论其实是对整本书的整体概况,这里没有多看上几遍 ...

  10. 轻量级数据库sqlite的编译

    sqlite是很多客户端程序所使用的一种轻量级数据库,但是目前没有lib文件,只有源码和dll文件,我们可以利用VS工具生成lib,然后在应用程序中使用. (1)下载地址 http://www.sql ...