私は本の中で、この例があります:配列変数の「値」とは何ですか?
#define ALLOCSIZE 10000 /* size of available space */
static char allocbuf[ALLOCSIZE]; /* storage for alloc */
static char *allocp = allocbuf; /* next free position */
char *alloc(int n) /* return pointer to n characters */
{
if (allocbuf + ALLOCSIZE - allocp >= n) { /* it fits */
allocp += n;
return allocp - n; /* old p */
} else /* not enough room */
return 0;
}
void afree(char *p) /* free storage pointed to by p */
{
if (p >= allocbuf && p < allocbuf + ALLOCSIZE)
allocp = p;
}
私は(その値)allocbuf
が何を表すかを知っている必要があるので、それがで使用されている:私は完全にこの例を理解できなかったので
if (allocbuf + ALLOCSIZE - allocp >= n)
。
これは、式の配列の最初の要素へのポインタに変換されます。 – MikeCAT
Cで、配列名を参照すると、配列の最初のバイトのアドレスになります。 – user3629249
のC言語では、ポインタの算術演算には注意が必要です。同じ配列にポインタを置いても問題はありませんが、コンパイラは同じ配列ではないポインタを詰まらせるでしょう。 – user3629249