c语言,指针与数组--指针与二维数组2
指向一维数组的指针 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] ;
|
十进制绝对地址
|
指向元素 | 指向一维数组 |
指向一维数组
|
指向一维数组 |
指向二维数组
|
十六进制地址
|
| 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的更多相关文章
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- 【C语言】构造长度可变的二维数组
#include <stdio.h> #include <malloc.h> #include <memory.h> int getArray(int ***p,i ...
- PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?
如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...
- 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作
二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...
- 【C语言入门教程】4.2 二维数组
C 语言允许使用多维数组,即使用多组小标的数组,二维数组是最常用的多维数组.多维数组在内存中存放数据的顺序与一维数组相同,使用连续的存储单元. 4.2.1 二维数组的一般形式 二维数组的一般声明形式为 ...
- c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点
//题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. // #include "stdio.h" #include <stdli ...
- C语言 一维数组叠加为二维数组样例
这里参看memcpy的用法,将一个一维整型数组不停的叠加为二维数组 使用宏定义来控制二维数组的行列 代码如下: #include <stdio.h> #include <stdlib ...
- C语言程序,找出一个二维数组的鞍点。
什么是鞍点????? 鞍点就是在一个二维数组中,某一个数在该行中最大,然而其在该列中又是最小的数,这样的数称为鞍点. 昨天突然在书上看到这样的一道题,就自己尝试着写了一个找出一个二维数组中的鞍点. 好 ...
- [zt]C++二维数组讲解、二维数组的声明和初始化
定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...
- C++入门经典-例6.12-使用数组地址将二维数组输出
1:以a[4][3]为例 a代表二维数组的地址,通过指针运算符可以获取数组中的元素 (1)a+n代表第n行的首地址 (2)&a[0][0]既可以看作第0行0列的首地址,同样也可以被看作是二维数 ...
随机推荐
- linux安装LNMP的资源
wget http://nginx.org/download/nginx-0.7.69.tar.gz wget http://museum.php.net/php5/php-5.2.10.tar.gz ...
- Python网络编程——编写一个简单的回显客户端/服务器应用
今天将python中socket模块的基本API学习完后,照着书上的实例编写一个套接字服务器和客户端.采用python3.5版本,在注释中会标明python2和python3的不同之处. 1.代码 ( ...
- Zookper
http://blog.csdn.net/yangbutao/article/details/11669609 http://www.oschina.net/code/snippet_255033_2 ...
- spring bean管理 笔记1
轻量级,无侵入 Bean管理 1 创建applicationContext.xml 2 配置被管理的Bean 3 获取Bean pom.xml配置 <dependency> <gro ...
- SiteMesh
1.导入对SiteMesh.jar的依赖 <dependency> <groupId>org.sitemesh</groupId> <ar ...
- 引用 字库编码Unicode相关知识
引用 weifeng.shen 的 字库编码Unicode相关知识 1. 各地编码 首先说明一下现在常用的一些编码方案: 1. 在中国,大陆最常用的就是GBK18030编码, ...
- org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir svn: Working c
Eclipse插入svn提交出现:org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked d ...
- 【IE】浏览器模式与文档模式 及其开发中处理方式
原文:http://blog.csdn.net/neo_liu0000/article/details/7589731 什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和 ...
- Java面试题集(1-50)
下面的内容是对网上原有的面试题集及答案进行了全面修订之后的内容(原来的题目有很多重复无用的题以及错误的答案),参照了JDK最新版本,删除了重复题目以及EJB2.x等无用内容,补充最新面试题.知识点巩固 ...
- portal---easyui
一,效果图. 二,源代码. <!doctype html><html><head> <meta http-equiv="Content-Type&q ...