您现在的位置: 北大青鸟(福州时代)授权培训中心 >> 学习园地 >> 学术研讨 >> 文章正文
  指针和数组的统一         ★★★ 【字体:
指针和数组的统一
作者:admin    文章来源:本站原创    点击数:    更新时间:2007-7-13    

指针和数组的统一

#include
#include

void main()
{
int i,j;
int arr[2][3]={1,4,7,3,6,9}; //毫无疑问,这是个静态的二维数组,分配了空间,数据也存入了
int (*p)[3]; //这是用指针来定义二维数组,但是没有分配空间,因此p是个盲指针

//打印数组arr
for(i=0;i<2;i++){
for(j=0;j<3;j++)
printf(" %d ",arr[i][j]);
printf("\n");
}

p=arr; //p指向arr数组的第一行,可以用p读取arr的元素了
for(j=0;j<3;j++)
printf(" %d ",(*p)[j]); //现在用p访问arr的第一行
printf("\n");
//p=p+1; //现在p指向arr数组的第二行
for(j=0;j<3;j++)
printf(" %d ",(*(p+1))[j]); //现在用p访问arr的第一行
printf("\n");

//下面这一段是上面的代码合在一起的写法
p=arr;
for(i=0;i<2;i++,p++){
for(j=0;j<3;j++)
printf(" %d ",(*p)[j]);
printf("\n");
}

//上面是用p来读取数组arr的元素, p还没有自已的内存空间

//下面给p分配空间来实现4行3列的二位数组
p=(int(*)[3])calloc(4,sizeof(int[3])); //搞定

//这个数组其实就是int p[4][3]

//现在我们用所熟悉的p[i][j]方式来访问
for(i=0;i<4;i++){
for(j=0;j<3;j++)
p[i][j]=(i+1)*(j+1); //ok?

}
for(i=0;i<4;i++){
for(j=0;j<3;j++)
printf(" %d ",p[i][j]);//ok?
printf("\n");
}

/*结论就是


如果需要定义一个8行3列的数组
int arr[8][3];
等同于
int (*arr)[3];
arr=(int(*)[3])calloc(8,sizeof(int[3]));


访问数组的第5行第3列的元素也有两种写法,这两种写法在以上两种方式定义的数组都可以
(1) arr[4][2]
(2) (*(arr+4))[2]


这就是指针和数组的统一,不要再说指针难了,指针是用来实现动态数组的;
如果行数和列数可以预知,你就用传统的方法定义数组好了。

VB是不是也有动态数组?是的,只不过VB用redim语句就可以了。

*/

}

文章录入:admin    责任编辑:admin 
  • 上一个文章:

  • 下一个文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
                    版权所有  北大青鸟APTECH (福州时代)授权培训中心
                    地址:福州津泰路268号新大都时尚广场三层(肯德基旁)
                    网址:http://www.fzaccp.com.cn
                    电话:0591-87603191 87603192 400-811-8090(省内可免费拨打)
                    邮箱:fzaccp@yahoo.com.cn
                    乘车路线:948路“仙塔街”站下
                    802、817、818、22、971路“旗汛口”站下。
                    19、26、51、52、702、802、949、971路"蒙古营"站下
                    邮编:350001
    闽ICP备08004336号
    站长:北大青鸟(福州时代)培训中心