a [n]是否真的可以和*(a + n)互换-为什么sizeof返回两个不同的答案?

qiubit

我在理解C语言中的一件事时遇到了问题。我在“ ANSI C”中读过,a[n]其中wherea数组之类的语句实际上等效于*(a+n)因此,这是我编写的一小段代码来检查:

#include <stdio.h>
int main(void)
{
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    int *p = a;
    printf("sizeof a: %d\n", sizeof(a));
    printf("sizeof p: %d\n", sizeof(p));
    return 0;
}

执行代码后,程序输出:

sizeof a: 40
sizeof p: 8

我不明白-我只是做什么?如何ap不同的对象?(由sizeof函数的输出判断)

来自莫斯科的弗拉德

根据C标准(6.5.3.4 sizeof和alignof运算符)

2 sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的括号名称。大小由操作数的类型确定。结果是一个整数。如果操作数的类型是可变长度数组类型,则对操作数求值;否则,不对操作数求值,结果为整数常量。

因此,a定义为10个整数的数组的对象占用的存储区大小为40个字节,因为该对象的每个元素依次具有4个字节的大小(在您的环境中sizeof(int)等于4)。

int a[10] = {0,1,2,3,4,5,6,7,8,9};

对象p定义为一个指针,并由数组第一个元素的地址初始化a

int *p = a;

在编译环境中,指针的程序大小等于8个字节。

您可以考虑声明

int *p = a;

也喜欢

int *p = &a[0];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

除间距和缩进以外,两个相同的div-为什么它们显示不同?

来自分类Dev

用于检测字符串\ n的正则表达式是什么?这里\和n存储在字符串的两个不同单元中

来自分类Dev

就尺寸和质量而言,是否可以进行逼真的n体太阳系仿真?

来自分类Dev

为什么在两个盒子上安装了不同版本的numpy和scipy

来自分类Dev

C中的同义`typedef`是否可以互换?

来自分类Dev

close()和closesocket()是否可以互换?

来自分类Dev

setupvalue和upvaluejoin是否可以互换(lua调试库)?

来自分类Dev

在Haskell中,部分应用和currying的概念是否可以互换?

来自分类Dev

为什么Swift的UnsafePointer和UnsafeBufferPointer不能互换?

来自分类Dev

不同的Linux / Unix内核可以互换吗?

来自分类Dev

路线参数可以互换

来自分类Dev

为什么两个numpy(n,)向量的矩阵@乘积是点积,而不是外积?

来自分类Dev

为什么LIB和DLL无法互换?

来自分类Dev

为什么我可以将两个不同容器的迭代器进行排序?

来自分类Dev

为什么同时使用两个getline函数,第二个不带\ n字符?

来自分类Dev

addListener和addEventListener是否相同?我可以互换使用吗?

来自分类Dev

用两个不同的瓷砖填充2 * n的房间

来自分类Dev

为什么Swift的UnsafePointer和UnsafeBufferPointer不能互换?

来自分类Dev

为什么两个几乎是理想的grep命令返回不同的输出:w / o和带有文件名

来自分类Dev

不同的Linux / Unix内核可以互换吗?

来自分类Dev

R中双“”和单“”引号(始终)是否可以互换?

来自分类Dev

Windows 10主机和Linux guest虚拟机,我可以互换两个许可证吗?

来自分类Dev

互换两列

来自分类Dev

NFC和MIFARE系统是否可以任意/互换使用?

来自分类Dev

为什么用两个变量进行汇总时,group_by和group_by_给出不同的答案?

来自分类Dev

sed:是否可以选择替换每行匹配的第 N 个和第 M 个匹配项?

来自分类Dev

为什么这两个宽度和高度相同的 HTML 画布返回第二个的高度不同?

来自分类Dev

为什么 <p> 标签可以互换地充当块元素和内联元素

来自分类Dev

为什么python中的\n给出两个空行?

Related 相关文章

  1. 1

    除间距和缩进以外,两个相同的div-为什么它们显示不同?

  2. 2

    用于检测字符串\ n的正则表达式是什么?这里\和n存储在字符串的两个不同单元中

  3. 3

    就尺寸和质量而言,是否可以进行逼真的n体太阳系仿真?

  4. 4

    为什么在两个盒子上安装了不同版本的numpy和scipy

  5. 5

    C中的同义`typedef`是否可以互换?

  6. 6

    close()和closesocket()是否可以互换?

  7. 7

    setupvalue和upvaluejoin是否可以互换(lua调试库)?

  8. 8

    在Haskell中,部分应用和currying的概念是否可以互换?

  9. 9

    为什么Swift的UnsafePointer和UnsafeBufferPointer不能互换?

  10. 10

    不同的Linux / Unix内核可以互换吗?

  11. 11

    路线参数可以互换

  12. 12

    为什么两个numpy(n,)向量的矩阵@乘积是点积,而不是外积?

  13. 13

    为什么LIB和DLL无法互换?

  14. 14

    为什么我可以将两个不同容器的迭代器进行排序?

  15. 15

    为什么同时使用两个getline函数,第二个不带\ n字符?

  16. 16

    addListener和addEventListener是否相同?我可以互换使用吗?

  17. 17

    用两个不同的瓷砖填充2 * n的房间

  18. 18

    为什么Swift的UnsafePointer和UnsafeBufferPointer不能互换?

  19. 19

    为什么两个几乎是理想的grep命令返回不同的输出:w / o和带有文件名

  20. 20

    不同的Linux / Unix内核可以互换吗?

  21. 21

    R中双“”和单“”引号(始终)是否可以互换?

  22. 22

    Windows 10主机和Linux guest虚拟机,我可以互换两个许可证吗?

  23. 23

    互换两列

  24. 24

    NFC和MIFARE系统是否可以任意/互换使用?

  25. 25

    为什么用两个变量进行汇总时,group_by和group_by_给出不同的答案?

  26. 26

    sed:是否可以选择替换每行匹配的第 N 个和第 M 个匹配项?

  27. 27

    为什么这两个宽度和高度相同的 HTML 画布返回第二个的高度不同?

  28. 28

    为什么 <p> 标签可以互换地充当块元素和内联元素

  29. 29

    为什么python中的\n给出两个空行?

热门标签

归档