c - 数组变量上的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 ?
解决方案
运算符 sizeof 返回对象类型的大小。你的数组有 3 个整数,所以它是 sizeof(int)*3。以字节为单位的指针大小是特定于平台的,在这种情况下,它是 4 字节 = 32 位。
数组变量具有指针语义,因此当它被传递给函数或在 int *p = arr 等赋值中使用时,它表示其第一个元素的地址,但它的类型不仅仅是其元素的类型。
在您的代码段中,编译器从您使用的初始化程序中推断出大小,因此在这种情况下,您的数组类型是 int[3],而不仅仅是 int。
推荐阅读
- rust - Rust serenity discord:如何从语音频道获取会员?
- javascript - Sonarqube throws Review this usage of "array" 因为它在这里只能是空的
- python - 循环中的 Python 文本到语音转换
- python-3.x - 在元组中查找模式
- spring - 如何避免 Spring-Jdbc 存储库类中的回滚
- javascript - 未捕获的 ReferenceError: WE 未在 WebGL Earth 中定义
- c# - 依赖注入:基于 URL 参数访问数据库 - 如何正确执行
- linux - 无法在 docker 容器内冻结 fs
- vba - 如何在 MSProject 的时间线上选择任务?
- c# - 首先创建主键实体框架代码