二维数组有两种存储方式
1,行优先存储 在连续的内存上,一行一行的安在上面
2,列优先存储 在连续的内存上,一列一列的安在上面
c/c++数组都是采用的行优先存储
例题: 在c语言中有一个矩阵大小16K*16K,若对两个这样的矩阵进行运算,行优先读取与列优先读取的区别?
A 一样快 B,行优先快 C 列优先快 D 无法确定
答案:B
解析:因为c/c++是行优先存储,那么我们采用行优先读取的话,从内存中取数据就可以按顺序遍历取出来,但是列优先存储还有四处移动指针找内存位置
二维数组的存储方式其实是和一维数组是一样的
但是如果使用的是双重只能指向的二维数组就不能用一维读取方式,因为访问的会是地址
指针+/-操作移动数不直接是字节数,而是 当时类型的字节数*移动数 个字节,因为这样比较人性化
指针和指针的操作只限于指向同一个数组,那求得就是两个之间的距离
const修饰指针
1,const int *p
代表 *p不可以变,即p指向的那个变量的内容不可以变
2,int * const p
代表 p不可以变,那么说明p的指向不能变
3,const int * const p
代表p的指向不可以变,p指向的变量的内存也不能变,相当于想通过p指针来操作那个变量的话,只能访问值,变成了常量