数组与指针间的转换浅析

 可以允许把指针好像数组名一样进行标记

#define N 100

int a[N],i,sum=0,*p=a;

for(i=0;i

sum+=p[i];

对待p[i]就像对待*(p+i)一样

对于多维数组:

double arry[5][10]={0};

double **pp;

pp=arry;//直接赋值会产生编译错误

解决方法: double arry[5][10]={0};

                double(*p)[5];

                for(int i=0;i<5;i++)

                p[i]=arry[i];


*************想要在函数体中接二维数组的方式访问****************

void f(float **p)

{

p[1][1]=0;

}

这样编写编译是没有问题,但是运行肯定会出错。float**p其实这里的p并不是一个二维数组的指针,只不过是一个指向指针的指针

例如:

floata[2][2]={0,1,2,3};

float**p=(float**)a;//强制将二维数组指针转为指向指针的指针

则此时p[0]=0;p[1]=1;p[2]=2;p[3]=3;

而p[0][0]=*(*(p+0)+0)=**p;

p[0][1]=*(*(p+0)+1);

二级指针是一个指向指针的指针,而二维数组其实就是一个指针,chara[3][4];a是指向整个二维数组的首地址,它相当于(char*)[n]并不是char**;

所以不能直接 t=a;

要这样 t=(char**)a;

你可能感兴趣的:(C语言问题解惑)