学习笔记
《深入理解C指针》
http://www.ituring.com.cn/book/1147
第4章 指针与数组
5、传递一维数组
传递一维数组传进去的是
int[] arr
还是int * arr
都可以,输出的时候写arr[i]
还是*(arr+i
也都行
6、存着指针的一维数组
存着指针的一维数组 数组元素是指针
int *arr[5] ;
指针数组,即,存着指针的数组
数组元素是arr[i]
,这是一个指针
取出这个指针自身所在用&arr[i]
取出这个指针存的地址用*arr[i]
7、指针和多维数组
多维数组
int arr3d[3][2][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}},
{{9, 10, 11, 12}, {13, 14, 15, 16}},
{{17, 18, 19, 20}, {21, 22, 23, 24}}
};
多维数组的访问
打印多维数组
int matrix[2][5]
多维数组也是数组,元素在内存中也是紧挨着依次排列的;一行一行地排列,
int matrix[2][5]
, 就是说有2行,每行再有5个元素;那么就是先排第一行、再排第二行;
-
int(*pmatrix)[5] = matrix;
括号不可省略
/// 定义一个指向二维数组的指针
/// 该二维数组的元素类型是整数,每行有5个元素
/// 声明的列数,比如5,必须指定,否则结果不可预期
-
matrix + 1
matrix + 1
matrix + 1
,实质上是跨了一行,这里每行有5个元素,一共是20字节
-
matrix[0]
或者matrix[1]
是行的指针
matrix[0] 或者 matrix[1] 是行的指针
8、传递多维数组
(1) 编译器需要知道 : 每行有几个元素
每行有个元素写清楚- 两种等价写法
void display2DArray(int arr[][5], int rows) ;
void display2DArray(int (*arr)[5], int rows) ;
(2)&matrix[0][0]
与 matrix
-
&matrix[0][0]
是一个整数指针 -
matrix
则是一个整数数组的指针,即,指向第一行的指针
(3)三维数组 int arr3d[3][2][4]
-
传入参数时,除了第一维以外的,维数全部要标清楚
三维数组 int arr3d[3][2][4] -
什么是 3 2 4 ? : 3行,每行切2个格子,每个格子里再有4个元素
int arr3d[3][2][4] 示意图
网友评论