MST

星途 面试题库

面试题:C语言中多维数组名与指针关系基础

假设有一个二维数组 `int arr[3][4];`,请阐述 `arr`、`*arr`、`arr[0]` 之间的指针关系,并说明它们各自的类型以及指向的内存位置。
32.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. arr
    • 类型int (*)[4],这是一个指向含有4个int元素的一维数组的指针。
    • 指针关系:它是二维数组名,代表整个二维数组的起始地址。
    • 指向的内存位置:指向二维数组首元素arr[0][0]所在的内存位置,即二维数组的起始地址。
  2. *arr
    • 类型int *,这是一个指向int类型的指针。
    • 指针关系*arr等价于arr[0],由于数组名在表达式中会被转换为指针,arr指向的是一个含有4个int元素的数组,对其解引用得到的是这个数组的首元素,也就是一个int类型的指针。
    • 指向的内存位置:指向二维数组第一行的首元素arr[0][0]的内存位置。
  3. arr[0]
    • 类型int *,同样是一个指向int类型的指针。
    • 指针关系arr[0]是二维数组第一行的数组名,在表达式中数组名会被转换为指针,它指向第一行数组的首元素。
    • 指向的内存位置:指向二维数组第一行的首元素arr[0][0]的内存位置。

总结来说,arr指向整个二维数组的起始位置,*arrarr[0]都指向二维数组第一行的首元素arr[0][0]的位置,只不过arr的类型和*arrarr[0]不同。