指针操作二维以及多维数组

重点要理解指针和数组的区别:
1.指针可以解引用,而数组不行。
2.数组本质上是地址,指针本质上也是地址,但是数组是常量无法赋值,而指针是变量可以赋值。

注意不管是二维数组还是多维数组,第一次解引用,是从最外层,也就是第一维数组解除。

*p = p[0]
*(p+1) = p[1]
*p+1 = p[1] + 1 //等价于p[1]元素的值加上整数1

二维数组的指针访问

#include <stdio.h>
void method(int (*p)[3],int n);
int main(){
    
    
    int a[2][3] =
    {
    
    {
    
    789,654,123},
    {
    
    357,753,951}};
    method(a,2);



}

void method(int (*array)[3],int n)
{
    
    
    int i,j;
    int (*p)[3];
    p = array;
    for(i=0;i<n;i++){
    
    
        for(j=0;j<3;j++)
        {
    
    

            printf("%d\n",*(*(p+i)+j));
        }
    }
    
}	

三维数组的指针访问

#include <stdio.h>
void method(int (*array)[2][3],int n);
int main(){
    
    
	int i,j,k;
	int data[2][2][3] = {
    
     {
    
     {
    
     999, 888, 777 }, {
    
     666, 555, 444} },
                      {
    
     {
    
     333, 222, 111 }, {
    
     100, 520,250 } } };
	int (*p)[2][3];
	p = data;   //data 实际上指向 data[0][0][0] ;
	
	for(i=0;i<2;i++)
	for(j=0;j<2;j++)
	for(k=0;k<3;k++){
    
    
		printf("%d\n",*(*(*(p+i)+j)+k));
	}


                          
}

猜你喜欢

转载自blog.csdn.net/qq_17802895/article/details/112855173