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列的首地址,同样也可以被看作是二维数 ...
随机推荐
- python3基本框架
- design pattern factory method #Reprinted#
引入人.工厂.和斧子的问题: (1),原始社会时,劳动社会基本没有分工,需要斧子的人(调用者)只好自己去磨一把斧子,每个人拥有自己的斧子,如果把大家的石斧改为铁斧,需要每个人都要学会磨铁斧的本领,工作 ...
- known good die( KGD) /确认好裸芯片,合格芯片
英文:known good die( KGD) / 中文:确认好裸芯片,合格芯片 完工的晶圆上有许多晶片存在,其单一品质有好有坏,经过老化试验后,其确知电性能良好的晶片即称为己知好晶片.不过,已知好晶 ...
- 转:C++中引用传递与指针传递区别
从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...
- python的二维数组操作
需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...
- 如何修改Sublime 侧边栏Sidebar的颜色
参考自:http://blog.csdn.net/a497393102/article/details/10563791 首先要找到 Default.sublime-theme 文件, 点击 subl ...
- HashMap,LinkedHashMap,TreeMap的区别(转)
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快 ...
- iOS 请求数据 error
解决办法如下: 0x1 ->请求数据时加上缺少的类型 AFHTTPSessionManager *manager = [selfAFHTTPSessionManager];// manag ...
- [GDUT 决赛]--GCD,LCM——我是好人(数论)
Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你两个数n和m,问你有多少对正整数对最大公约数是n,最小公倍数是m最后友情提供解题代码(我真是太好人了) void sol ...
- java数组中的三种排序方法中的冒泡排序方法
我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...