首页 > 解决方案 > 数组变量上的sizeof与c中指针上的sizeof

问题描述

请参阅以下 c 中的示例:

    #include <stdio.h> 

    int main() 
    { 
        int arr[] = {1, 2 ,3}; 
        int *ptr = arr;

        printf("sizeof arr[] = %d ", sizeof(arr)); 
        printf("sizeof ptr = %d ", sizeof(ptr)); 

        return 0; 
    }

输出:sizeof arr[] = 12 sizeof ptr = 4

为什么指针“ptr”上的 sizeof 输出 4 而数组变量“arr”(虽然“arr”也是一个指针)输出 12 ?

标签: carrayspointers

解决方案


运算符 sizeof 返回对象类型的大小。你的数组有 3 个整数,所以它是 sizeof(int)*3。以字节为单位的指针大小是特定于平台的,在这种情况下,它是 4 字节 = 32 位。

数组变量具有指针语义,因此当它被传递给函数或在 int *p = arr 等赋值中使用时,它表示其第一个元素的地址,但它的类型不仅仅是其元素的类型。

在您的代码段中,编译器从您使用的初始化程序中推断出大小,因此在这种情况下,您的数组类型是 int[3],而不仅仅是 int。


推荐阅读