3和2是一样的,也是会报错的。
可以使用行指针double (*p)[3]=data;指向数组第0行,也就是我们平常理解的第一行。
访问方式,假设data是i行j列,*(*(p+i)+j)就是第i行j列的元素值,也就是data[i][j]的值。
也可以使用列指针double *p = data[0]指向第0行0列,访问方式如下:
(三)应该报错的:error: cannot convert ‘double (*)[3]’ to ‘double*’ in initialization.
先回答(2):其实(二)和(三)一个意思,都不正确。(三)在你那里不报错估计是编译器环境的原因。
对于问题(1),在于能否正确理解二维数组名的含义。
二维数组名data表示第0行的地址;*data表示data[0][0]的地址;而**data才表示data[0][0]的值。
可以看一下该博文:二维数组中数组名与其指针的关系