この文は、ポインタv[i]
はあなたが文字ポインタの配列と文字の配列を混乱しているように見えるアドレス
に割り当てられていると言う:v[i]
は単にのi番目のメンバーでありますアレイはchar *
で構成されます。
すべてでは、の値がであるため、ポインタが渡されます。あなたはv[]
がchar
ポインタを格納する配列であると仮定しています。ポインタが交換されているため
コードが有効ではなく、char
変数はで指摘:v[i]
とv[j]
はポインタであり、従ってtemp
もポインタであるべきです。
次のテストコードは、呼び出し元のという視点から実証しています。あなたの機能で何が起こっているのかを簡単に確認できます。ポインタがスワップされている値として渡されていますが、指す変数char
はそのままです(この例ではb
とc
)。あなたが代わりに ``のchar * `の` char`をtemp`行った場合
#include <stdio.h>
void swap2(char *v[], int i, int j) {
char *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
int main (void)
{
char a = '1', b = '2', c = '3', d = '4', e = '5';
char *v[5] = {&a, &b, &c, &d, &e};
for(int i = 0; i < 5; i++)
printf("%p:%c ", (void*)(v[i]), *(v[i]));
printf ("\n");
swap2(v, 1, 2);
for(int i = 0; i < 5; i++)
printf("%p:%c ", (void*)(v[i]), *(v[i]));
printf ("\n");
printf("b = %c\n", b);
printf("c = %c\n", c);
return 0;
}
、あなたは 'char'に'のchar * 'を割り当てることだろう、とあなたはおそらくコンパイルエラーを取得したいです。.. –
ポインタ**は**アドレスです。 – Barmar