int dct2d[8][8]; int (*pdct2d)[8][8]; pdct2d=dct2d 第一行是没问题了,第二行你应该声明8个指针,你实际上声明了8*8个,这样: int (*pdct2d)[8]; 但是这时不能用,应该: for(int i=0; i<8; i++) { pdct2d[i] = dct2d[8]; } 这样就应该能用了,你试试。
错了,应该是pdct2d[i] = dct2d[i];
int a[3][3]; int (*p)[3];p=(int (*)[3])a[0];然后p[j][i]即等同于a[j][i]。为什么非要定义一个指针访问这个二维数组,因为这个二维数组的名称、下标都是经过几次间接调用,所以很长,写代码的时侯语句很长,难以阅读,用一个新指针就很简洁明了。谢谢各位热心。
int *pdct2d;
pdct2d = (int*)dct2d;这样写就行了
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
在C/C++中,可将二维数组的每一行看成一个元素,即数组a包含了三个元素a[0]、a[1]、a[2],数组名a是该一维数组a的指针,即a[0]元素的指针,a+1是a[1]元素的指针,a+2是a[2]元素的指针。指针与二维数组的关系可用下图概括。其中:
行指针:行方向的指针a、a+1和a+2,是指向一维数组的指针,其指针类型为含有三个整型元素的一维数组;
列指针:列方向的指针a[0]、a[0]+1、a[0]+2、… 、a[2]+2,其指针类型为整型。
注意:尽管a与a[0]、a+1与a[1]、a+2与a[2]的值相同,但类型不同,若有必要,可相互转换。
图片地址:http://hi.csdn.net/attachment/201201/27/0_1327640416M0bM.gif推广:设有说明“int a[M][N];”(M、N均为符号常量),则元素a[i][j](0≤i<M,0≤j<N)的指针为:
①a[i]+j,原因如图②*(a+i)+j,因a[i]等价于*(a+i)
③*(&a[i])+j,因a+i等价于&a[i]④&a[i][j]
元素a[i][j]也有如下等价表示:
①*(a[i]+j)②*(*(a+i)+j)③(*(a+i))[j]
例 用指针输出二维数组的元素值。
#include<iostream.h>
#include<iomanip.h>void main(void)
{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j,*p; cout<<"用指针输出数组的全部元素:\n";
for(p=(int*)a,i=0;i<9;i++)
{ if(i&&i%3==0) cout<<'\n';
cout<<*p++<<'\t';
}cout<<"\n用四种不同方法输出数组的元素:\n";
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cout<<*(a[i]+j)<<'\t'
<<*(*(a+i)+j)<<'\t'
<<(*(a+i))[j]<<'\t'
<<a[i][j]<<'\n';
cout<<"用指针输出数组的各个元素:\n";
for(i=0,p=a[0];p<=a[2]+2;p++,i++)
{ if(i&&i%3==0) cout<<'\n';
cout<<setw(4)<<*p;
}
}
int (*pdct2d)[8][8];
pdct2d=dct2d;我的意思就是定义一个指针pdct2d,来代替dct2d,然后用pdct2d[0][1]等形式访问dct2d的元素。
这个pdct2d应该是一个指向二维数组的指针。但是二楼的方法是不行的。
谢谢两位。
int dct2d[8][8];
int **pdct2d;pdct2d=dct2d;
这样编译倒是可以通过,但是执行报错。
跟踪发现,的确是将dct2d的地址传递给pdct2d了。
不知道你这么做有何意义,pdct2d[0][1]这样本来就可以访问数组元素
*(pdct2d + n * 8 + n)用下标法取dct2d的[n][n]号元素
pdct2d[n * 8 + n]
int (*pdct2d)[8][8];
pdct2d=dct2d
第一行是没问题了,第二行你应该声明8个指针,你实际上声明了8*8个,这样:
int (*pdct2d)[8];
但是这时不能用,应该:
for(int i=0; i<8; i++)
{
pdct2d[i] = dct2d[8];
}
这样就应该能用了,你试试。
int (*p)[3];p=(int (*)[3])a[0];然后p[j][i]即等同于a[j][i]。为什么非要定义一个指针访问这个二维数组,因为这个二维数组的名称、下标都是经过几次间接调用,所以很长,写代码的时侯语句很长,难以阅读,用一个新指针就很简洁明了。谢谢各位热心。