Cのインタビューの質問をたどると、「sizeof演算子を使用せずにCで配列のサイズを見つける方法は?」という質問があり、次の解決策が見つかりました。動作しますが、理由はわかりません。
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
予想通り、5を返します。
編集:人々はこの答えを指摘しましたが、構文は少し異なります、すなわちインデックス方法
size = (&arr)[1] - arr;
どちらの質問も有効で、問題へのアプローチが少し異なると思います。多大な助けと徹底した説明をありがとうございました!
*((*(&array + 1)) - 1)
自動配列の最後の要素を取得するために使用することは安全?。tl; dr *(&a + 1)
がUndefined Behvaior
(ptr)[x]
と同じです*((ptr) + x)
。
&a + 1
は有効なオブジェクトをポイントしていないため、無効です。