本多さん:
>「&a」で取得できる「配列へのポインタ」って使い道ってあります?
私の認識は、こっちに書いた通り。
http://kmaebashi.com/programmer/pointer.html
| 配列から読み換えられたポインタは左辺値を持たないため、 & 演算子の
| オペランドにはならないはずであるが、この例外規則のため、 & でアドレス
| (配列の先頭要素のアドレスではなく、配列全体のアドレス)が 取得できる。
| この規則は初心者を混乱させることがある (例えば scanf("%s", buf) でなく、
| scanf("%s", &buf)と書いても 正常に動いてしまう(正常に動いたように見えて
| しまう)が、 メリットは今ひとつわからない。
774RRさん:
>int a[10];
>memset(&a, 0, sizeof a);
>配列だから &a にせずとも a とだけ書けば事足りるのだが、配列の場合だけ & 不要ってのは
>(単なる表記の問題ではあるが)初心者を惑わすもととなりうるんで。
strcpy(dest, src)とかでもdestに&は付きませんから、これは付けないほうが
むしろ統一が取れるのではないでしょうか。
>typedef int i10[10]; // これは .h ファイルにあって
>i10 a; memset(&a, 0, sizeof a); // こっちは .c ファイルにある
>の場合には & ありのほうが自然で、ないのは不自然。
MinGWのsetjmp.hより:
typedef _JBTYPE jmp_buf[_JBLEN];
でも、setjmp()を使うときは、
jmp_buf buf;
if (setjmp(buf) == 0) {
...
なのであって、&は付けません。
まあ、前から書いているように、私もこれって不自然だと思うんですが。