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

前端之家收集整理的这篇文章主要介绍了在计算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]都具有相同的值,但它们的类型不同,因为指针算术与它指向的内容紧密耦合.这很重要.

猜你在找的C&C++相关文章