static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof(a)/sizeof(int);
ANSI 99のショートカットはありますか?このCコードよりも短い配列の長さを見つける方法はありますか?
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof(a)/sizeof(int);
ANSI 99のショートカットはありますか?このCコードよりも短い配列の長さを見つける方法はありますか?
私はショートカットがないと思いますが、あなたの猫用マクロ:
#define arrlen(arr) (sizeof(arr)/sizeof(arr[0]))
+1が、大文字で書かれているので、マクロであることがわかります。 –
は、このCコードよりも配列の長さを見つけるために短い方法はありますか?
はい、1文字の短い方:
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof(int);
編集: @pmgによって提案され、さらに短いバージョンがあります:
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof*a;
ます。また、識別子len
のための少ない文字を使用することができます。
:)
あなたは配列に要素の数をしたい場合は、
sizeof arr/sizeof *arr
または
sizeof arr/sizeof arr[0]
はそれを取得と同じくらい短いです。 arr
がVLAでない限り、これらはコンパイル時に計算されることに注意してください。
arr
がの配列の式で、ポインタではない場合にのみ機能することにも注意してください。あなたは
void foo(int arr[])
{
size_t len = sizeof arr/sizeof *arr;
...
}
ような何かを行う場合は、この文脈でarr
がポインタ表現、ではない配列であるので、あなたは、あなたが期待する答えを得ることはありません(オンラインC language standardに§ 6.3.2.1 ¶ 3を参照してください。および§ 6.5.7.3 ¶ 7)。
良い質問です。私はCのように見える。 – mikithskegg
(VLAを除く) 'sizeof arr/sizeof * arr'はコンパイル時定数です。なぜあなたは別の方法を望んでいますか? *マクロを試してください。* – pmg
'int len = 12'? ;) – Nim