指针数组和数组指针
指针数组:array of pointers
首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。操作和数组类似
int *p1[10];` // [] 比 * 优先级高,所以首先是数组,数组的元素是指针, 所以是指针数组
- 元素表示:*(p+i)
char *p[] = {"stately" , "plump" , "buck" , "mulligan"};
printf("%d\n", sizeof(p)); // 指针数组里存放的是指针,所以结果是16
for(int i = 0; i < 4; i++ )
printf("%s\n", *(p+i));
*(p+0) | *(p+1) | *(p+2) | *(p+3) |
---|---|---|---|
stately | plump | buck | mulligan |
数组指针:a pointer to an array
首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
int (*p2)[10]; // () 和 [] 优先级一样,但运算方向从左到右, *p2 构成一个指针,所以是**数组指针**
- 元素表示:(*a)[i]
二维数组的声明 int p2[3][10]
,作为函数参数的声明形式为
void show_arr(int (*arr)[10], int rows)