指针与数组--指针与二维数组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();
}
/*
[email protected]:/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]

 

时间: 2024-08-05 02:49:45

指针与数组--指针与二维数组2的相关文章

关于理解指针数组,数组指针,数组名,二维数组的一些技巧。

/*************关于数组名***************/ int a[3] = {1, 2, 3} 1.数组名代表数组第一个元素的地址,注意,不是数组地址(虽然值相等),是数组第一个元素地址,a 等同于 &a[0]; a+1是第二个元素的地址.比第一个元素地址a(或者&a[0])超出了一个整型指针的大小,在这里是4个字节(byte) cout << a << endl;会输出数组第一个元素地址. 2.取址符号&. &a是数组的地址,注意

C++指针数组、数组指针、数组名及二维数组技巧汇总

这篇文章主要介绍了C++指针数组.数组指针.数组名及二维数组技巧汇总,对于深入理解C++数组与指针来说非常重要,需要的朋友可以参考下. 本文较为详细的分析了关于理解C++指针数组,数组指针,数组名,二维数组的一些技巧.是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用. 一.关于数组名 假设有数组: 1 int a[3] = {1, 2, 3} 1.数组名代表数组第一个元素的地址,注意,不是数组地址(虽然值相等),是数组第一个元素地址,a 等同于 &a[0]; a+1是第二个元素的地

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

1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include <stdlib.h> int main() { int a1=20, a2=345, a3=700, a4=22; int b1=56720, b2=9999, b3=20098, b4=2; int c1=233, c2=205, c3=1, c4=6666; int d1=34, d2=0, d3

把一维数组转换成二维数组

有一个一维数组,想把它变成m*n形式的二位数组, $arr = array(....); // 一维数组 $m = ceil(count($arr)/n); $array = array(); for ($i = 0, $j = 0; $i < $m; $i++) { for ($k = 0; $k < n; $k++) { $temp = $arr[$j++]; if($temp) $array[$i][$k] = $temp; } } 把一维数组转换成二维数组

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

如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组'; } else { echo '不是一维数组'; } PHP手册: int count ( mixed $var [, int $mode ] )  --  计算数组中的单元数目或对象中的属性个数  如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组 :任意给定分数去计算科目和人均平均分)

1 //数组间的关系arr[]中的数字为几,[]内就有几个数 2 //{ }内的数是从0开始,如需要打印应从0开数 3 如{2,6,9,8,7}打印arr[4]就是7 4 #include <stdio.h> 5 #include <stdlib.h> 6 int main() 7 { 8 int arr[] = { 1,2,3,4,8}; 9 10 printf("%d\n", arr[3]); 11 12 system("pause");

将一维数组转化成二维数组

<nz-table #colSpanTable [nzData]="temp" nzBordered> <tbody> <ng-container *ngFor="let row of temp;let i = index"> <tr> <td *ngFor="let title of row">{{title.AreaCodesName}}</td> </tr>

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

1:以a[4][3]为例 a代表二维数组的地址,通过指针运算符可以获取数组中的元素 (1)a+n代表第n行的首地址 (2)&a[0][0]既可以看作第0行0列的首地址,同样也可以被看作是二维数组的首地址.&a[m][n]就是第m行n列元素的地址 (3)&a[0]是第0行的首地址,当然&a[n]就是第n行的首地址 (4)a[0]+(n-1)表示第0行第n个元素 (5)*(*(a+n)+m)表示第n行第m列 (6)*(a[n]+m)表示第n行第m列元素 2:代码如下: // 6

一维数组复习,二维数组与多维数组

输入班级人数,输入每个人的分数,求班级最高分,最低分,以及去掉两个最高分并且去掉两个最低分之后的所有人员的平均分. 输入班级人数,输入一个人名,输入一个分数.求班级最高分是多少,是谁的分数(注意姓名跟分数对应) 运用两个一维数组: 运用一个一维数组: 一个元素是一个点,一维数组是一条线,二维数组是一个面,三维数组是一个立体. 二维数组: int [,]array=new int[3,2]{ {1,2}, {2,3}, {3,4} }; 其中3表示有三个一维数组,2表示每个一维数组中有两个元素.

JS 数组(遍历 二维数组)

<script> // var arr =Array(); // arr[0] = 'aaa'; // arr[1] = 'bbb'; // arr[6] = 333; // arr.push('11111'); // arr.forEach(function(v,k){ // alert(v); // }); //第一种遍历 //var arr=Array(); //arr[0]=1; //arr[1]=2; //arr[2]=3; //arr[4]='aaaa'; 2与4之间会显示一个un