对于给定的数组:
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]都具有相同的值,但它们的类型不同,因为指针算术与它指向的内容紧密耦合.这很重要.