0
void swap(char *a,char *b){
  char t;
  t = *a;
  *a = *b;
  *b = t;
}
int main(void){
  char  a = '1';
  char b = '2';

  swap(&a,&b);
  printf("The value is %c and %c respectively\n",a,b);
  return 0;
}

上記のコードには、私を混乱させる場所があります

aifはポインタであり、*aそれが指す値だと思います

int *ptr, a = 1;

ptr = &a;
printf("The value of *ptr should be a: %d\n",*ptr);
printf("The value of *a should be an hex address: %p\n",ptr);

そのため、swap(char *a, char *b)関数では、ポインターではなく値を取ります( *a ではなく)、

swap(&a, &b) しかし、実際にはポインター値をパラメーターとして渡し、コードは機能します。誰かが私にそれを説明できswap(char *a){...}ますa*a

4

5 に答える 5

2

あなたの機能

swap(char *a, char *b)

は 2 つのパラメーターを取り、どちらも 型char *です。これは文字どおり、メモリ内のどこかにある文字を指していることを意味します。

ポインタを逆参照するとき

t = *a;

あなたは「a指しているものは何でもつかんで、中に入れてtください。

おそらく混乱は、*2 つの関連しているが異なるものを意味するという事実によるものです。の場合、 type、具体的にはメモリ内のどこかの文字を指すものをchar *定義しています。の場合、は「 aが指している文字を見て、それが何であるかを教えてください」という意味です。*a*

于 2012-07-19T03:34:00.117 に答える
2

*は、2 つの異なるが密接に関連するものを意味するため、混乱を招きます。変数宣言では、*は「ポインタ」を意味します。では、*「ポインターを逆参照する」ことを意味します。

これは、便利なニーモニックになることを目的としていchar *aます。コードに がある場合、それ*achar.

于 2012-07-19T03:34:34.767 に答える
0

これで私たちの目的は値を交換することです

char a='1'と書くとき; つまり、アドレス662442に「1」を付けています(&a = 662442と仮定します)。char b = '2'; つまり、アドレス662342に「2」を配置します(&b = 662342と仮定します)。

ここで、aとbを交換することを検討します。ここでの目的は、662442(&a)の値を662342(&b)値に変更し、662342(&b)の値を662442(&a)の値に変更することです。

ここでスワッピングのために一時変数chartempを取得、次のことを行います

temp = * a; つまり、アドレス662442(&a)の値をtempに割り当てます。

* a = * b; つまり、アドレス662342(&b)の値をアドレス662442(&a)の値に割り当てます。

ここで、aの以前の値(つまり、可変温度に保持された値)をアドレス662342(&b)に配置します。

*b=温度; すなわち、アドレス662442(&a)に臨時雇用者を割り当てる

于 2012-07-19T04:32:06.477 に答える
0

main

  • aですchar
  • &achar へのポインタaです。

swap

  • acharへのポインタです
  • *aが指す文字aです。

ポインターにポインターを渡しましたが、見事に機能しました。ボックスとエラーで絵を描いてみてください。毎回物事をクリアします。aコードには 2 つの と 2 つのがあることを覚えておいてくださいb

于 2012-07-19T03:33:42.803 に答える
0

はい、アスタリスク*にはポインターに関連する複数の意味があります。

  • アドレスを含む変数 (ポインター) を導入する宣言で使用できます。

    int *ptr = NULL;

    などの引数リストでも同様void swap(char *, char *)です。

  • function 内のように、既存のポインターを逆参照したり、ポイントされている値を取得したりするためにも使用できswapます。

    t = *a;

これは一般に、C を初めて使用する学生にとってかなりの混乱を引き起こしますが、実際には非常に単純です。

于 2012-07-19T03:35:25.560 に答える