1. 指向多维数组的指针:(图片及代码摘自C Primer Plus 第6版-10.7.1)
-
int (*pz)[2]; (1)*pz,则pz是一个指针 (2)[2],则这个指针指向包含两个元素的数组
-
int * pax[2]; (1)[]优先级高于*,则pax是一个包含两个元素的数组 (2)*,则这个数组中的元素是指针
书中的示例代码及其运行结果:
#include <stdio.h>
int main(void)
{
int zippo[4][2] = { { 2, 4 }, { 6, 8 }, { 1, 3 }, { 5, 7 } };
int(*pz)[2];
pz = zippo;
printf("pz = %p, pz + 1 = %p\n", pz, pz + 1);
printf("pz[0] = %p, pz[0] + 1 = %p\n", pz[0], pz[0] + 1);
printf("*pz = %p, *pz + 1 = %p\n", *pz, *pz + 1);
printf("pz[0][0] = %d\n", pz[0][0]);
printf("*pz[0] = %d\n", *pz[0]);
printf("**pz = %d\n", **pz);
printf("pz[2][1] = %d\n", pz[2][1]);
printf("*(*(pz+2) + 1) = %d\n", *(*(pz + 2) + 1));
getchar();
return 0;
}
2. 二维数组动态申请内存:(代码摘自C Primer Plus 第6版-12.4.3)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n = 5;
int m = 6;
int arr[n][m]; // n*m 的变长数组(VLA)
int (*p1)[6]; // C99之前的写法
int (*p2)[m]; // 要求支持变长数组
p1 = (int (*)[6]) malloc(n * 6 * sizeof(int)); // n*6 数组
p2 = (int (*)[m]) malloc(n * m * sizeof(int)); // n*m 数组(要求支持变长数组)
arr[1][2] = p1[1][2] = p2[1][2] = 12;
printf("arr[1][2]=%d, p1[1][2]=%d, p2[1][2]=%d\n", arr[1][2], p1[1][2], p2[1][2]);
getchar();
return 0;
}




京公网安备 11010502036488号