您的位置:首页 > 其它

(*p)[n] ,指向多维数组的指针运算基础知识

2014-08-29 22:25 281 查看
#include <stdio.h>
#include <stdlib.h>

#include<malloc.h>

int main()

{

int a[3][4]= {1,3,5,7,9,11,13,15,17,19,221,23};

int *p,i,j;

p = a;

scanf("i=%d,j=%d",&i,&j);

printf("a[%d][%d] = %d\n",i,j,*(p+i*4+j));

return0;

}

int main()

{

int a[3][4]= {1,3,5,7,9,11,13,15,17,19,221,23};

int (*p)[4],i,j;

p = a;

scanf("i=%d,j=%d",&i,&j);

printf("a[%d][%d] = %d\n",i,j,*(*(p+i)+j));

return0;

}

*p做为指向单个元素的指针每次运算(如++)均以单个元素为单位,而(*p)[n]则是以n为基准(如++是一次指向多维中下一行,即地址增加n*sizeof(),第n+1个元素)。

在前定义(*p)[n]下,虽然*(p+i)和(p+i)在数值上是同一地址,当由于p指向多维数组,读取时有递增或递减趋势,*(p+i)的++操作是列向自增,跨度为单个元素,(p+i)的++操作是行向自增,跨度为n个元素。

*p
共具有n个指针,如*p[i],p[n]为一地址型数组,存放的均为地址;

(*p)[n]只有一个指针p,指向多维数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: