阿思翠的哥套和原装的:c的指针问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 04:08:12
谁能讲讲对于多维数组,要取任其中意元素,用指针怎么操作啊?
最近在学习c语言的时候遇上了麻烦,比如对于三维数组a[3][3][3],用数组名的话,取a[1][1][1]的值可以写成:printf("%d",*(*(*(a+1)+1)+1)),根据书上说的a可以理解为数组首地址,但是如果用一个指针变量p,取了数组首地址后就不能像这样算了——*(*(*(p+1)+1)+1),编译时会提示:“无效间接运算错误”。甚至对于一个二维数组也不行,这是怎么回事啊?哪位大侠能讲讲形如“*(*(*(a+1)+1)+1)”这种运算的门道,怎样理解啊?

楼上说得不完全对,在C里面应该用int (*p)[3][3]=a;

如果你的指针是这么申明的: int ***p = a 这样*(*(*(p+1)+1)+1)就可以使用了.你三次使用取值运算符*来运算一个1维指针,当然不行。如果是int *p =a 你可以按连续地址 *(p+1*9+1*3+1)来取就可以了

要用*(*(*(p+1)+1)+1),则应当声明为int ***p
而用上层兄弟的声明int(*p)[3][3]=a时,printf("%d",*(a+1));
说明:好久没有接触了,好象是这样的