加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

指针数组和指向数组的指针变量

(2013-04-11 15:23:23)
分类: 软件开发基础
   1、指向数组的指针变量
    int (*p)[4];表示p是一个指针变量,指向一个有4个整型元素的数组。*p有4个元素,每个元素为整型。
   区别于
   理解:首先该变量是一个含4个元素的数组,(*p)是数组名,相当于与下面对比 *p = a,[4]的作用体现在
   p = p+1时,表示p移动的位置为4个整型的长度。
   测试代码:
 
        int (*p)[2];
int (*pp)[4];
    int vec[4][2]= {{1,100},{2,200},{3,300},{4,400}};
  
pp = vec;
p = vec;

   printf(" *((*pp+1)+0) is %d\n",*(*(pp+0)+1));
   printf(" *((*pp+0)+1) is %d\n",*(*(pp+1)+0));

   printf(" *((*p+1)+0) is %d\n",*(*(p+0)+1));
   printf(" *((*p+0)+1) is %d\n",*(*(p+1)+0));
   输出为:
因此:定义上,
   int (*p)[2];和 int *pp;本质上都是指针,均可以指向相同的数组以及变量,区别:1、只是当使用值的时候, p=p+1移动的是2个整型的长度,pp=pp+1移动的是一个整型的长度。2、且在使用指针指向的值时,**p = *p;即 p是指针的指针。


    int a[4]; 表示a 有4个元素,每个元素为整型。



   2、 一个数组,若其元素均为指针类型数据,称为指针数组。也就是说,指针数组中的每一个元素都是相当于一个指针变量。例如:
   int * p[4];
   理解:由于[]比*优先级高,因此p先与[4]结合,形成p[4]的形式,然后再与前面的*结合,显然表示是指针。指针数组的使用主要是比较适合用来指向若干个字符串,使得字符串处理更加灵活。




   函数的参数如果是数组,或者是指针,调用时需要传递的参数就是地址,函数定义时,需要传递的参数部分只是参数变量的声明,调用时实际是对这些变量进行赋值,因此对于数组或者指针的赋值只能通过地址来实现。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有