以前以为数组很简单,现在发现原来是自己很肤浅,昨天写了一段代码总是越界一晚上也没搞清楚是怎么回事,现在才发现是在对二维数组的指针引用上出错了,下面是目前发现几种形式:
1. 首先静态二维数组如何作为参数传入函数形式:
void myfunc(char sToken[][100])
或
void myfunc(char (*sToken)[100])
是等价的!
2.静态二维数组元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j), 它们都与a[i][j]等价, 或者还可写成(*(a+i))[j]。
此时注意(*a+i)[j]和(*(a+i)[j])与前面表示的不同之处(数组其实就是指针,上次在csdn上写的那个).
3.下面是一段测试代码
void main(){
double Array[3][3] = {
{3,-0.1,-0.2},{0.1,7,-0.3},{0.3,-0.2,10}};
//Decompose(Array, 3);
double (*ptr)[3] = Array;
//ptr是(*)[]类型的指针,它存储的是数组第一维(即每一行)的首地址,它的每一次递增增加的地址数都是3个double类型的字节数
ptr = &Array[1];
//ptr中的内容其实是一个[]类型的指针,即数组第二维(即特定某一行)的首地址,它的每一次递增增加的是1个double类型的字节数
//同时注意[]的优先级高于*(解引用dereference)的优先级
cout << (*(ptr+1)[1]) << endl;