C语言指针与多维数组:容易混淆的 3 个核心概念

数组名的指针本质

  • 一维数组名 arr 是 int* 类型,指向首元素 arr[0]
  • 二维数组名 matrix 是 int (*)[n] 类型(指向包含 n 个 int 的一维数组),即「数组指针」。
  • int matrix[2][3];
    int (*ptr)[3] = matrix; // ptr指向第0行,ptr+1指向第1行
    printf(“%d”, (*ptr)[1]); // 等价于 matrix[0][1] = 2
  • 2 指针数组 vs 数组指针
    指针数组:int* arr[5],是包含 5 个 int 指针的一维数组。
    数组指针:int (*arr)[5],是指向包含 5 个 int 的一维数组的指针。
    区分关键:括号位置 ——(*arr) 表示这是一个指针,指向数组。
    5.3 用指针访问多维数组的 3 种方式
    以二维数组 int arr[2][3] 为例:

    标准下标法:arr[i][j]
    指针偏移法:*(arr[i] + j)(arr[i] 是第 i 行首地址,+j 偏移 j 个元素)
    二级指针法(需类型匹配)

  • int **p = (int **)arr; // 仅当二维数组是连续内存时可用,否则报错
    printf(“%d”, p[i][j]);
欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » C语言指针与多维数组:容易混淆的 3 个核心概念

提供最优质的资源集合

立即查看 了解详情