假如一个 4 * 3 的数组,你可以想象为
0,0 0,1 0,2
1,0 1,1 1,2
2,0 2,1 2,2
3,0 3,1 3,2由于数组就是连续的存放空间,如果用连续编号来看就是
0, 1, 2,
3, 4, 5,
6, 7, 8,
9, 10, 11由于可以得到第一个元素的地址,就可以算出后面元素的地址,就是每行无素数 * 以前的行数 + 在当前行的位置,这就是 5 * i + j 的意思&b[0][0]+5*i+j 是 b[i][j] 的地址,该数组的一行有 5 个元素
0,0 0,1 0,2
1,0 1,1 1,2
2,0 2,1 2,2
3,0 3,1 3,2由于数组就是连续的存放空间,如果用连续编号来看就是
0, 1, 2,
3, 4, 5,
6, 7, 8,
9, 10, 11由于可以得到第一个元素的地址,就可以算出后面元素的地址,就是每行无素数 * 以前的行数 + 在当前行的位置,这就是 5 * i + j 的意思&b[0][0]+5*i+j 是 b[i][j] 的地址,该数组的一行有 5 个元素
不是吧,*(&b[0][0] + 5 * i + j)表示的应该是变量b[i][j]呀,
iamfancy说的很对,你的数组应该是定义为 b[?][5]的,
例:array[3][5] array[0][0] array[0][1] array[0][2] array[0][3] array[0][4]
array[1][0] array[1][1] array[1][2] array[1][3] array[0][4]
array[2][0] array[2][1] array[2][2] array[2][3] array[0][4]
而在计算机内是这么存放的:(address 是词数组的初始地址)
address +5* 0 +0 array[0][0]
address +5* 0 +1 array[0][1]
address +5* 0 +2 array[0][2]
address +5* 0 +3 array[0][3]
address +5* 0 +4 array[0][4]
address +5* 1 +0 array[1][0]
.
.
.
address +5* 2 +4 array[2][4]
实际上数组在计算机中都是用指针表示的。
重载是c++语言的优秀之处,相同名称的函数可以被定义很多次,主要以函数返回值类型和携带的参数类型不同而加以区别,如,你可以定义三个函数:
int add(int x,int y){ return x+y;}
long add(long x,long y){ return x+y;}
float add(float x,float y){ return x+y;}
还有参数个数也可以不同:
int add (int x,int y, int z) {return x+y+z;}
在程序中直接调用,编译器会自动识别。重载为虚函数和“继承”提供了支持。