MST

星途 面试题库

面试题:C语言中sizeof与指针及数组的复杂关系

在C语言中,有如下代码:int arr[5] = {1, 2, 3, 4, 5}; int *ptr = arr; 请分别计算 sizeof(arr) 和 sizeof(ptr) 的值,并阐述 sizeof 运算符在数组和指针上表现不同的内在机制。
18.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 计算结果
    • sizeof(arr) 的值为 20。因为 arr 是一个包含 5int 类型元素的数组,在常见的系统中,int 类型通常占 4 个字节,所以 5 * 4 = 20 字节。
    • sizeof(ptr) 的值通常为 48 字节。在32位系统中,指针占 4 个字节,在64位系统中,指针占 8 个字节。ptr 是一个指向 int 类型的指针,sizeof 计算的是指针变量本身的大小,而不是指针所指向的内容的大小。
  2. 内在机制
    • 对于数组sizeof 运算符作用于数组时,它返回整个数组所占的内存字节数。数组在内存中是一块连续的存储空间,sizeof 会根据数组元素的类型和元素个数来确定总的字节数。
    • 对于指针sizeof 运算符作用于指针时,它返回的是指针变量本身在内存中所占的字节数。指针本质上是一个存储内存地址的变量,其大小取决于系统的寻址能力(32位或64位),而与指针所指向的数据类型或实际指向的内存空间大小无关。