对于给定的数组:
int array[10];
Run Code Online (Sandbox Code Playgroud)
有什么区别
sizeof array / sizeof *array
Run Code Online (Sandbox Code Playgroud)
和
sizeof array / sizeof array[0]
Run Code Online (Sandbox Code Playgroud)
在计算元素数量时array?
在这种情况下没有.两者最终都会产生类型,int因为在第一种情况下,当用作*(您正在解引用a int*)的操作数时,数组会衰减为指向第一个元素的指针.
注意一件事 - 你可能听说过sizeof没有数组的衰减,但是当数组用作操作数时,会发生衰减*.操作数sizeof很简单int.(讨论sizeof arr/sizeof *arr)
如果您想获得一个清晰的想法 - 试试这个
int a[10][20];
printf("%zu %zu\n",sizeof a/ sizeof *a, sizeof a/ sizeof **a);
Run Code Online (Sandbox Code Playgroud)
你的第二种情况是WYSIWYG类型的东西 - 我的意思是,它只是说数组的总大小并将其除以它包含的内容(它的大小).是的,它会返回数组的大小.这就是正在做的事情.
arr[0]只不过*(arr+0)是手段*arr.所以这是有道理的,他们是一样的.
几点可以澄清事情(如果你以后使用sizeof)
array而&array[0]在这方面相同.它们的价值和类型都是一样的.但是对于指针而言,相同的值只是一件事 - 它们对指针算术的暗示是一个完全不同的故事.
这里并和所有具有相同的价值,但它们的类型是不同的,因为指针运算密切与它指向耦合.这很重要.
int a[10][20];a&aa[0]
根据array[n]定义,表达式与*(array + n)
根据array + 0定义,表达式与array(除非array是操作数sizeof)相同.
所以,是的,array[0]而且*array是相同的.
这远远超过了这种情况所需要的.对于sizeof只有类型重要的参数,两个表达式肯定是相同的.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |