最近、Cでは、次の宣言のarray
と_&array
_の間に重要な違いがあることに気付きました。
_char array[] = {4, 8, 15, 16, 23, 42};
_
前者はcharへのポインターであり、後者は6文字の配列へのポインターです。また、_a[b]
_が*(a + b)
の構文糖であることも注目に値します。確かに、あなたは_2[array]
_を書くことができ、それは標準に従って完全に動作します。
したがって、この情報を利用してこれを書くことができます。
_char last_element = (&array)[1][-1];
_
_&array
_のサイズは6文字なので、_(&array)[1])
_は配列の直後にある文字へのポインターです。 _[-1]
_を見て、最後の要素にアクセスしています。
これにより、たとえば配列全体を交換できます。
_void swap(char *a, char *b) { *a ^= *b; *b ^= *a; *a ^= *b; }
int main() {
char u[] = {1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < sizeof(u) / 2; i++)
swap(&u[i], &(&u)[1][-i - 1]);
}
_
最後に配列にアクセスするこの方法には欠陥がありますか?
I =ベクトルの長さ-1を設定するforループを実行し、毎回それを増やすのではなく、0より大きくなるまで減らします。for(int i = vet.length;i>0;i--)