码迷,mamicode.com
首页 > 其他好文 > 详细

指针知识梳理10-指向数组的指针

时间:2014-07-08 18:51:03      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:c   二维数组   数组的指针   

一、指向数组的指针

1、所谓指向的意思:我们通常说指针变量指向某个变量或者某块内存,意思是这个指针变量存储了某个变量的地址或者某块内存的地址。

2、一个变量可以占多个字节,我们通常所说某个 的地址指的是这块内存的起始地址。比如int  a,变量a栈 0x10 0x11 0x12 0x13这四个字节,那么a的地址是0x10.

3、(1)以前我们定义一个数组的时候,通常是把这个数组当做同种类型的变量的集合来看的,即数组的每个元素,用法为a[i].

       (2)我们也可以把数组当做一个整体来看,int  a[5],  a是个变量,这个变量的类型是数组,这个变量占40个字节,。

                  按照变量定义基本模型 type  name ,如果数组是这么定义可能更好理解这个整体概念, int[10]   a,但是C语言语法不是这样写的。

         (3) 得到一个变量的地址 用&符号,那么当把数组a看做一个变量的时候,它的地址为 &a.

               如果要存储 &a这个数据,需要相应的指针变量,即所谓指向数组的指针。

               定义方法如下  int (*p)[5],其实按照  type *p 这个模型来定义,int[5]  *p 这种写法更好理解,只不过C语言的爸爸在创造语法的时候不这么规定。

              那么 p = &a;

              对于 p 来说,p+i 地址偏移 i*sizeof(a)  

          (4) 以下需要分清楚区分

                对于 int a[5];

                  &a 与 &a[0] 的区别,这两个得出来的地址 在数值上是相等的,但是他们的数据类型是不一样的。

                  int  *p1 = &a[0];

                  int  (*p2)[10] ;

                  p2 = &a;

                 bubuko.com,布布扣

                   如上图,我们分别把数组当做集合和整体来看。

                   p1 存储a[0]的地址 ,也就是a[0]的起始地址,0x10.

                   p2 存储a的地址,也就是数组的其实地址,也是a[0]的起始地址 0x10.

                   p1+1  结果为 0x14

                   p2+1  结果为 0x24

4、typedef 用法

      typedef  int(type*)[5];

      type 是种类型,是指向一维数组的指针类型(说法比较拗口),以下写法定义变量p1是等效的。

      type  *p1;

      int (*p1)[5];

5、在语法层面上使用

        typedef  int(type*)[5];

        int  a[5];

        type p;

        p = &a; //这里数组名就不代表的是a[0]的地址了。

        那么 *p 就是 a 了。

        a[i] ---> (*p)[i];// 注意这里优先级


二、二维数组的数组名

       int  a[2][3];

       二维数组可以看成一维数组,a[0]   a[1]是数组的两个元素,每个元素是 个一维数组 (int[3]).

       一维数组的数组名可以代表第一个元素的地址,第一个元素是个int[3]型的数组。

     

typedef  int(*p)[3];
int a[2][3];
p = a;
p = &a[0];
for(i = 0;i<2;i++)
{
	for(j = 0;j<3;j++)
	{
	//以下几种方式等效
		a[i][j]  = 1;
		*(*(p+i)+j)  = 1;
		*(p[i]+j) = 1;
		p[i][j] = 1;
	}
}








               





指针知识梳理10-指向数组的指针,布布扣,bubuko.com

指针知识梳理10-指向数组的指针

标签:c   二维数组   数组的指针   

原文地址:http://blog.csdn.net/xiaoliu0518/article/details/37507643

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!