控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

数组指针的用法,用处。

作者:未知 出处:cnblog 2013年07月23日 阅读:

 int *a[4]; //指针数组

 
指针数组就相当于一次声明了多个指针。数组的每一个元素都是一个指针。很好理解,下面主要看数组指针
 
int (*p)[4]; //数组指针
 
数组指针就相当于一次声明了一个指针。只不过这个指针指向很特别,是一个数组。
 
[]优先级大于*,故数组指针声明时要加()。
 
例1:
 
 
#include<stdio.h>
#include<stdlib.h>
void main()
{
    //数组指针的用法,用处。
    int b[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。
    //int *p2=&b;
    p=&b;
    int i=0;
    while(i<16)
    {
          printf("%d\t",(*p)[i]);
          //printf("%d\t",*p2++);
          i++;
    }
}printf("%d\t",(*p)[i]);遍历输出数组b;
数组指针就相当于舞王僵尸一样,带了小弟,n就是小弟的个数,通过下标值能直接访问到具体哪一个小弟,即数组里哪一个数
 
数组指针下标自增(i++)的时候,指针指向不变。
 
这里直接用整形指针就可实现,而且更方便简洁。见上面被注释部分。
 
 
 
例2:把例1的while()语句替换。
 
    while(i<4)
    {
          printf("%d\t",(*p++)[0]);
          i++;
    }例2输出1 5 9 13,相当于指针一次移动了4个int.16个字节。
 
 
数组指针自增(*p++)时,指针指向移动sizeof(类型)。
 
 
 
其实上句在其他类型指针也适用。
 
如int *p;
 
 //指针指向了int,就是整型指针,整型指针有啥特点?就是能保存整形变量的地址。有啥用途?就是p++的时候能指向下一个int型数。所以了?经常用指针指向一个数组。因为他们都是int型的,所以推导出步长了?整型指针的步长为sizeof(int),即4字节     
 
//同理可以得出什么float型指针,char型指针什么的。。。     
 
同理就得出了数组指针,特点?保存数组首地址。用途?p++的时候能指向下一个数组。所以了?要用它来指向一个二维数组。因为二维数组里的每一个元素都是相同类型的(都是一个int型数组),所以推导出步长了?sizeof(int[4]),即16
 
//说白了就一指针,指向了数组类型
 
 
 
例3:数组指针指向二维数组。
 
 
#include<stdio.h>
#include<stdlib.h>
void main()
{
    int a[3][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24}};
    int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。
    p=&a;
    int i=0;
    while(i<3)
    {
        //printf("%d\t",(*p)[i]);
        //数组指针,指向的是一个数组整体,相当于指针也带了下标,当执行i++操作时,下标+1,得到该数组的下一个元素,
        //在该例中,指针没有位移,所以依次输出为1 2 3
 
        printf("%d\t",(*p++)[0]);
        //整型数组类型的指针,指向的是一个数组整体,当执行*p++操作时,指针位移该数组长度的位数
        //在该例中,即指针位移4个int的长度,所以输出是1 11 21
        i++;
    }
}通过例3就能够很明显的看出数组指针下标自增与本身自增的区别了。
 
我记得以前老师说过:能用一维数组就尽量不要用二维数组。我想说的是:能用指针实现的尽量不要用数组指针
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统