微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在计算C中的数组元素数时,* array和array [0]之间的差异

对于给定的数组:
int array[10];

有什么区别

sizeof array / sizeof *array

sizeof array / sizeof array[0]

在计算数组中的元素数量时?

解决方法

在这种情况下没有.两者最终都会产生int类型,因为在第一种情况下,当用作*的操作数时,数组会衰减为指向第一个元素的指针(您正在取消引用int *).

注意一件事 – 你可能听说过sizeof没有数组的衰减,但是当数组用作*的操作数时,会发生衰减. sizeof的操作数只是int. (讨论sizeof arr / sizeof * arr)

如果您想获得一个清晰的想法 – 试试这个

int a[10][20];
printf("%zu %zu\n",sizeof a/ sizeof *a,sizeof a/ sizeof **a);

你的第二种情况是WYSIWYG类型的东西 – 我的意思是,它只是说数组的总大小并将其除以它包含的内容(它的大小).是的,它会返回数组的大小.这就是正在做的事情.

arr [0]只是*(arr 0)表示* arr.所以这是有道理的,他们是一样的.

几点可以澄清事情(如果你以后使用sizeof)

array和& array [0]在此上下文中是相同的.它们的价值和类型都是一样的.但是对于指针而言,相同的值只是一件事 – 它们对指针算术的暗示是一个完全不同的故事.

int a [10] [20];这里a和& a和a [0]都具有相同的值,但它们的类型不同,因为指针算术与它指向的内容紧密耦合.这很重要.

原文地址:https://www.jb51.cc/c/115866.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐